天天看点

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

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

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

<a target="_blank"></a>

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

<code>sudo apt-add-repository ppa:octave/stable</code>

<code>sudo apt-get update</code>

<code>sudo apt-get install octave</code>

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

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

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

<code>&gt;&gt; info = audioinfo ('testing.ogg')</code>

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

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

<code>&gt;&gt; file='yourfile.ogg'</code>

<code>&gt;&gt; [m, fs] = audioread(file)</code>

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

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

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

<code>&gt;&gt; [y, fs] = audioread (filename, samples)</code>

<code></code>

<code>&gt;&gt; [y, fs] = audioread (filename, datatype)</code>

<code>&gt;&gt; [y, fs] = audioread (filename, samples, datatype)</code>

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

<code>&gt;&gt; samples = [1, fs)</code>

数据类型:

<code>&gt;&gt; [y,fs] = audioread(filename,'native')</code>

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

新建一个 ogg 文件:

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

<code>&gt;&gt; filename='cosine.ogg';</code>

<code>&gt;&gt; fs=44100;</code>

<code>&gt;&gt; t=0:1/fs:10;</code>

<code>&gt;&gt; w=2*pi*440*t;</code>

<code>&gt;&gt; signal=cos(w);</code>

<code>&gt;&gt; audiowrite(filename, signal, fs);</code>

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

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

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

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

<code>&gt;&gt; [y,fs]=audioread('yourfile.ogg');</code>

<code>&gt;&gt; player=audioplayer(y, fs, 8)</code>

<code>scalar structure containing the fields:</code>

<code>bitspersample = 8</code>

<code>currentsample = 0</code>

<code>deviceid = -1</code>

<code>numberofchannels = 1</code>

<code>running = off</code>

<code>samplerate = 44100</code>

<code>totalsamples = 236473</code>

<code>tag =</code>

<code>type = audioplayer</code>

<code>userdata = [](0x0)</code>

<code>&gt;&gt; play(player);</code>

在这个教程的续篇,我们会进入音频处理的高级特性部分,可能会接触到一些科学和商业应用中的实例。

原文发布时间为:2016-09-09

本文来自云栖社区合作伙伴“linux中国”

继续阅读