注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

怎样使用 Octave 对音频文件进行读写操作  

2016-09-09 22:37:01|  分类: 产品开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Octave 是一个 Linux 上类似于 Matlab 的软件,它拥有数量众多的函数和命令,支持声音采集、记录、回放以及音频信号的数字化处理,用于娱乐应用、研究、医学以及其它科学领域。在本教程中,我们 会在 Ubuntu 上使用 Octave 的 4.0.0 版本读取音频文件,然后通过生成信号并且播放来模仿在各种情况下对音频信号的使用。

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

本教程中关注的不是安装和学习使用安装好的音频处理软件,而是从设计和音频工程的角度理解它是如何工作的。

环境准备

首先是安装 octave,在 Ubuntu 终端运行下面的命令添加 Octave PPA,然后安装 Octave 。

  1. sudo apt-add-repository ppa:octave/stable

  2. sudo apt-get update

  3. sudo apt-get install octave

步骤1:打开 Octave

在这一步中我们单击软件图标打开 Octave,可以通过单击下拉式按钮选择工作路径。

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

步骤2:音频信息

使用audioinfo命令查看要处理的音频文件的相关信息。

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

步骤3:读取音频文件

在本教程中我会使用 ogg 文件来读取这种文件的属性,比如采样、音频类型(stereo 和 mono)、信道数量等。必须声明的一点是教程中使用的所有的命令都是在 Octave 终端窗口中执行的。首先,我们必须要把这个 ogg 文件赋给一个变量。注意:文件必须在 Octave 的工作路径中。

这里的 M 是一个一列或两列的矩阵,取决于信道的数量,fs 是采样率。

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

下面的操作都可以读取音频文件:

  1. >> [y, fs] = audioread (filename, samples)

  2. >> [y, fs] = audioread (filename, datatype)

  3. >> [y, fs] = audioread (filename, samples, datatype)

samples 指定开始帧和结束帧,datatype 指定返回的数据类型。可以为所有变量设置值:

数据类型:

如果值是“native”,那么它的数据类型就依数据在音频文件中的存储情况而定。

步骤4:音频文件的写操作

新建一个 ogg 文件:

我们会从一个余弦值创建一个 ogg 文件。采样率是每秒 44100 次,这个文件最少进行 10 秒的采样。余弦信号的频率是 440 Hz。

  1. >> filename='cosine.ogg';

  2. >> fs=44100;

  3. >> t=0:1/fs:10;

  4. >> w=2*pi*440*t;

  5. >> signal=cos(w);

  6. >> audiowrite(filename, signal, fs);

这就在工作路径中创建了一个 'cosine.ogg' 文件,这个文件中包含余弦信号。

科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作

播放这个 'cosine.ogg' 文件就会产生一个 440Hz 的 音调,这个音调正好是乐理中的 'A' 调。如果需要查看保存在文件中的值就必须使用 'audioread' 函数读取文件。在后续的教程中,我们会看到怎样在两个信道中读取一个音频文件。

步骤5:播放音频文件

Octave 有一个默认的音频播放器,可以用这个音频播放器进行测试。使用下面的函数:

  1. >> [y,fs]=audioread('yourfile.ogg');

  2. >> player=audioplayer(y, fs, 8)

  3. scalar structure containing the fields:

  4. BitsPerSample = 8

  5. CurrentSample = 0

  6. DeviceID = -1

  7. NumberOfChannels = 1

  8. Running = off

  9. SampleRate = 44100

  10. TotalSamples = 236473

  11. Tag =

  12. Type = audioplayer

  13. UserData = (0x0)

  14. >> play(player);

  评论这张
 
阅读(49)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017