根据固定频率写一个音频文件

Posted _Roy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据固定频率写一个音频文件相关的知识,希望对你有一定的参考价值。

  • 关于单通道,44.1KHZ,16bit,单一频率,pcm buffer的创建,我是用swfit 写的,代码如下:
 func createPcmBuffer(frames:UInt32,frequency:Double,amplitude:Double)->AVAudioPCMBuffer{
        let buffer = AVAudioPCMBuffer.init(pcmFormat: AVAudioFormat.init(settings:[
            AVFormatIDKey:kAudioFormatLinearPCM,
            AVSampleRateKey:44100,
            AVNumberOfChannelsKey:1,
            AVLinearPCMBitDepthKey:16,
            AVLinearPCMIsFloatKey:false
            ])!, frameCapacity: frames*44100)!
        buffer.frameLength = buffer.frameCapacity
        let length = buffer.frameCapacity
        let data = buffer.int16ChannelData!
        let p = data.pointee
        for i in 0..<Int(length) {
            let v = Int16(32767*sin(2*Double.pi*frequency*i/44100)*amplitude) //这里的32767是Math.pow(2,16)-1得来的
            // v = (v<<8) + ((v>>8)&0xFF) 经过我测试不需要高低位互换
            p[i] = v
        }
        return buffer;
    }
  • 至于采样率,位数,浮点,双通道这些应该是一通百通的,这里我就不一一列出了
  • 根据这个算法,我了解了pcm buffer的写法,至于里面的数据的算法,就很多了,比如白噪音的产生算法,铜器敲击的算法等等。我这里就抛砖引玉了,还是感叹当初高数为什么不学好,不然就可以研究声波通信了,那个8011.a 帧同步死都弄不懂。

以上是关于根据固定频率写一个音频文件的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:在一帧音频数据中查找主要频率

向固定频率的音频插孔发送短信号

蓝桥杯——根据手册写底层

根据滚动位置播放不同的音频文件

语音隐写基于matlab GUI DWT音频数字水印含Matlab源码 712期

语音隐写基于matlab GUI DWT音频信号数字水印嵌入提取含Matlab源码 1028期