如何改变录制声音的音高?

时间:2015-07-03 09:36:34

标签: c# xaml audio windows-phone-8

我正在创建一个录制声音的应用。我能够录制和保存声音,但我必须通过滑块改变录制声音的音高。我怎样才能做到这一点? 我正在通过媒体元素播放录制的声音。以下是保存临时音频文件的功能:

    private void SaveTempAudio(MemoryStream buffer)
    {
        // Be defensive ... trust no one & nothing
        if (buffer == null)
            throw new ArgumentNullException("Attempting to save an empty sound buffer.");

        // Clean out the AudioPlayer's hold on our audioStream
         if (_audioStream != null)
        {
            AudioPlayer.Stop();
            AudioPlayer.Source = null;

            _audioStream.Dispose();
        }

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
        {

            if (isoStore.FileExists(_tempFileName))
                isoStore.DeleteFile(_tempFileName);

            _tempFileName = string.Format("{0}.wav", DateTime.Now.ToFileTime());

            var bytes = buffer.GetWavAsByteArray(_recorder.SampleRate);

            _audioStream = isoStore.CreateFile(_tempFileName);
            _audioStream.Write(bytes, 0, bytes.Length);

            AudioPlayer.SetSource(_audioStream);
        }
    }

    private void PlayAudioClick(object sender, RoutedEventArgs e)
    {
        AudioPlayer.Play();
    }

1 个答案:

答案 0 :(得分:0)

除非您找到具有内置功能的库,否则您必须以对应于所需音高的速率访问各个声音字节,将它们转换为帧,并将光标穿过帧。例如,如果要以150%的速度进行回放,则可以使用线性插值来光标查看数据并提供新值。示例:四个帧,值为0,0.2,0.4,0.6。光标通过150%表示你得到第一个(0)然后计算第二个和第三个(0.3)之间的中间值,然后得到第四个(0.6)等等。然后你取出那个帧数据并将其转换回音频字节。