背景音频任务中的文字转语音

时间:2014-07-12 13:31:55

标签: windows-phone-8 windows-runtime windows-phone-8.1

我在WP8.1项目中有一个背景音频任务,它使用BackgroundMediaPlayer来播放音频。
在我的前台应用程序中,我有可以收听的文章(在线文章)。这是通过TTS(SpeechSynthesizer)完成的。

我尝试过两件事来实现这个功能:

  1. 在任务中创建SpeechSynthesisStream并将其与BackgroundMediaPlayer.Current.SetStreamSource(IRandomAccessStream stream)一起使用。
    当文本长于几百个字符时,始终使用此方法命中内存异常。

  2. 在前台应用中创建流并将其保存到 .wav 文件中。 这适用于第一种方法中较长的文本,但创建了非常大的文件,并且生成时间长得不可接受,内存增加了几百MB。


  3. 第二次实施的代码:

    string content = ".......";
    
    // create stream from synthesizer
    SpeechSynthesizer synth = new SpeechSynthesizer();
    SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(content);
    
    // get inputstream and size of stream
    ulong size = stream.Size;
    IInputStream inputStream = stream.GetInputStreamAt(0);
    
    stream.Dispose();
    
    DataReader dataReader = new DataReader(inputStream);
    await dataReader.LoadAsync((uint)size);
    byte[] buffer = new byte[(int)size];
    dataReader.ReadBytes(buffer);
    inputStream.Dispose();
    dataReader.Dispose();
    
    // open folder and file
    IStorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Audio", CreationCollisionOption.OpenIfExists);
    IStorageFile file = await folder.CreateFileAsync("audio.wav", Windows.Storage.CreationCollisionOption.ReplaceExisting);
    
    // write file
    await Windows.Storage.FileIO.WriteBytesAsync(file, buffer);
    

    如何以“内存友好”和快速的方式实现此功能(不使用在线服务)?

0 个答案:

没有答案