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

  • 关于单通道,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 帧同步死都弄不懂。

原文地址:https://www.cnblogs.com/RoysPhoneBlog/p/9483287.html

时间: 2024-10-17 11:27:25

根据固定频率写一个音频文件的相关文章

写一个xml文件到磁盘的方法

/** * 往磁盘上写一个xml文件 * * <?xml version="1.0" encoding="UTF-8" standalone="true"?> //文档的神明 <persons> //标签tag <person id=“18"> //ID是person标签的一个属性 <name>allen</name> <age>36</age> <

自定义报告,用Java写一个html文件

因为testng不满足我们的展示,所以我们会自己定义一个报告,实施步骤是,把静态页面做好后,放在Java项目中,其实和生成一个日志文件类似,只是该了后缀,Java中需要使用到PrintStream,案例如下,我在静态页面中制作的静态网页 在代码中实现如下,就是把所有内容搬移过来 package until; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStre

如何写一个schema文件

<!-- xmlns:默认的命名空间,一个 schema中只允许有一个xmlns,因为应用这个命名空间的资源不用添加前缀,其他的命名空间需要添加前缀 --> <!-- targetNamespace:是别的schema或者xml文件引用本schema文件的路径, --> <!-- targetNamespace和xmlns:tns是一致的,什么意思呢,就是说在本页面如果要引用本页面的一些资源,就要加入tns这个前缀才能引用,不然就是引用默认命名空间xmlns的资源 -->

spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动

@echo offcd D:\workProject\bushustart cmd /c "title EurekaServer- && java -jar EurekaServer-0.0.1-SNAPSHOT.jar"start cmd /c "title busms- && java -jar busms-1.5.9.RELEASE.jar"start cmd /c "title mcfc- && ja

DSP-Quattro 5(音频文件编辑工具)

DSP-Quattro 5 Mac特别版是一款由斯特凡诺·迪诺公司开发的音频文件编辑软件,DSP-Quattro 5的功能非常的强大,可以让你的电脑成为一台专业的音频编辑工具,只要有了DSP-Quattro 5使用最新的MacOS库编译,这款这么好的工具有新的完全可编程批处理器,你也可以成为音频编辑制作达人.在家就可以进行音频的编辑和创作. DSP-Quattro 5 Mac软件介绍 DSP-Quattro 5 Mac特别版具有64位音频和图形引擎,多线程内部引擎,使用最新的MacOS库编译,为

xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView.frame=(CGRect){{50,50},{230,230}}; /** 创建图片 */ UIImage * image=[[UIImage alloc]init]; /** 获取图片 */ image=[UIImage imageNamed:@"图片名称"]; /** 把图片给容器

【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库(转)

转载请注明出处: http://blog.csdn.net/zhaokaiqiang1992 今天一打开博客,发现一位朋友给我发了一封私信,请教下面的问题,所以特写此文章,为其解惑. 从这位朋友的提问中,我们需要了解下面的这些问题,才能给他很好的解答: (1)如何获取手机里所有歌曲的信息? (2)在歌曲文件发生改变,比如增删操作之后,如何及时的更新媒体库,从而获取到最新的歌曲信息? (3)在4.4版本之后,扫描sd卡,更新媒体库的操作发生变化了吗? 下面,我将就以上三个问题,进行解答. (1)如

XAudio2学习之流化音频文件

流化是一个过程,在这个过程中,我们只需要在内存中维护一小块内存来播放音频文件.这样我们就可以使用很大的音频文件作为背景音乐,而不占用很大的内存.当我们流化一个音频文件的时候,音频数据是从硬盘上一块一块的读取,而不是将整个文件一次性全部加载.流化是通过异步读取音频数据到硬盘缓冲区队列来完成的.当一个缓冲区填充好数据后,提交给source voice.当source voice播放完成一个缓冲区后,这个缓冲区就可以再次用来读取文件中的数据.通过这种方式循环使用缓冲区,允许我们只加载一部分文件的数据就

把音频文件压缩变小的方法

有时候一个音频文件比较大,传输以及使用很不方便,需要把文件压缩变小,这里就提供一种压缩的工具. 注意,压缩音频文件是以降低码率为代价的,可能会影响音频效果 码率计算公式 基本的算法是:[码率](kbps)=[文件大小](字节)X8/[时间](秒)/1000 音频文件专用算法:[比特率](kbps)=[量化采样点](kHz)×[位深](bit/采样点)×[声道数量](一般为2) 软件准备 酷狗音乐 开始压缩 1.准备好一个需要压缩的音频文件. 查看属性可以看到,这个文件有200多M 2.打开酷狗音