0

Windows Phone 7での音​​声(オーディオ)録音に関して、次の問題が発生しています。

Microsoft.Xna.Framework.Audio名前空間で利用可能なマイククラスを使用してサウンドを録音しています。ここにコードがあります-

変数宣言:

private Microphone mic = Microphone.Default;
private MemoryStream stream;
private const string FILE_NAME = "recording.mp3";
byte[] buffer;

録音ボタンクリックコード-

mic.BufferDuration = TimeSpan.FromSeconds(1);
buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)];

// Create the event handler.  I could have done an anonymous   
// delegate here if I had so desired.  
mic.BufferReady += new EventHandler<EventArgs>(mic_BufferReady);

stream = new MemoryStream();
mic.Start();

バッファレディイベントコード----------

void mic_BufferReady(object sender, EventArgs e)
{
    mic.GetData(buffer);
    // Write buffer to stream
    stream.Write(buffer, 0, buffer.Length);  
}

ボタン停止コード-

private void btnStop_Click(object sender, RoutedEventArgs e)
{
    dt.Stop();
    btnStop.IsEnabled = false;
    btnPlayRecording.IsEnabled = true;

    mic.Stop();
    //Writing stream into Storage
     writeFile(stream);
}

private void writeFile(MemoryStream s, string name)
{
    try
    {
        using (var userStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (userStore.FileExists(name))
            {
                userStore.DeleteFile(name);
            }
            using (var file = userStore.OpenFile(name, FileMode.CreateNew))
            {
                s.WriteTo(file);
            }
        }
    }
    catch (Exception ee)
    {

    }
}

ストリームを隔離されたストレージに保存して再生すると、音量が非常に小さくなり、品質も良くありません。

それで

  1. ボリュームを増幅できますか?
  2. ビットレートを上げることはできますか?
  3. Fadin-Fadoutを実行できますか?

これら3つすべてがWindowsPhone7で不可能な場合、これらすべての操作を実行するために利用できるサードパーティのAPIはありますか?

前もって感謝します

4

1 に答える 1

0

.NET での増幅は簡単ではありません。私が見つけた最良のアプローチは、「サウンド処理プログラムのスイス アーミー ナイフである SoX」に対して外部プロセス呼び出しを行うことでした。( http://sox.sourceforge.net/ )

私は Windows 7 フォンを持っていないので、そこで SOX が実行されているかどうかはわかりません。

フォーマットは SOX -V volume_parameter inputFileName outputFileName 増幅のため、次のようになります。

"sox.exe -v 3.0 myNormalFile.wav myAmpedFile.wav"

300% の増幅が得られます。Sox ではビットレートの変更も可能です...フェードイン/フェードアウトについては不明です。

Windows 7 Phone 専用のものは何もありませんが、.NET/C# コードはそのままです:

string finalFileName = "myAmplifiedFile.WAV";
string tmpFileName = "tmpHoldingFile.WAV";
string soxEXE = @"C:\SOX\sox.exe";
string soxArgs = "-v 3.0 ";

/// OTHER STUFF HERE 

/*-----------------------------------------------------------
* Call the SOX utility to amplify it so it is 3 times as loud.
*-----------------------------------------------------------*/
try
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo = new System.Diagnostics.ProcessStartInfo();
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    process.StartInfo.FileName = soxEXE;
    process.StartInfo.Arguments = string.Format("{0} {1} {2}",
                             soxArgs, tmpFileName, finalFileName);
    process.Start();
    process.WaitForExit();
    int exitCode = process.ExitCode;
}
catch (Exception ex)
{
    string err = ex.Message;
    return false;
}
/*-------------------------------------------------------------
 * OK, now we play it using SoundPlayer
 *-------------------------------------------------------------*/
try
{
    SoundPlayer simpleSound = new SoundPlayer(@finalFileName);
    simpleSound.PlaySync();
    FileInfo readFile = new FileInfo(finalFileName);
    string finalDestination = finalDirectory + "/" + readFile.Name;
    readFile.MoveTo(finalDestination);
}
catch (Exception e)
{
    string errmsg = e.Message;
    return false;
}
finalFileName = "";
tmpFileName = "";
spVoice = null;
于 2013-05-06T13:56:51.473 に答える