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

系统 Linux 系统运维
Octave 是一个 Linux 上类似于 Matlab 的软件,它拥有数量众多的函数和命令,支持声音采集、记录、回放以及音频信号的数字化处理,用于娱乐应用、研究、医学以及其它科学领域。本教程中关注的不是安装和学习使用安装好的音频处理软件,而是从设计和音频工程的角度理解它是如何工作的。

[[171366]]

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

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

环境准备

首先是安装 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,可以通过单击下拉式按钮选择工作路径。

 步骤2:音频信息

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

  1. >> info = audioinfo ('testing.ogg'

 步骤3:读取音频文件

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

  1. >> file='yourfile.ogg'  
  1. >> [M, fs] = audioread(file) 

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

 

 

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

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

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

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

数据类型:

  1. >> [y,Fs] = audioread(filename,'native'

如果值是“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' 文件,这个文件中包含余弦信号。

 

播放这个 '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); 

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

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2016-10-31 19:41:50

LinuxOctave音频文件

2016-10-31 20:21:05

LinuxOctave音频文件

2022-11-13 19:43:37

Linux

2023-01-05 16:51:04

机器学习人工智能

2018-12-17 11:00:11

LinuxSoundConver音频文件格式

2022-04-12 11:07:11

Hi3861鸿蒙操作系统

2022-08-12 08:38:52

FFmpegLinux命令

2023-12-13 09:22:40

python

2009-10-21 10:15:29

VB.NET复制

2023-11-28 14:22:54

Python音频

2024-04-23 08:24:05

音频Android播放

2020-05-15 08:06:37

JavaScriptobject URL对象

2011-08-02 16:58:15

iPhone AVAudioPla 音频播放

2021-03-10 18:26:49

Tensorflow语音识别音频处理

2011-12-22 09:54:40

PhoneGap APMedia

2021-03-29 10:56:51

人工智能深度学习

2021-03-19 17:59:30

深度学习音频程序

2023-09-07 15:05:57

人工智能音频助手

2015-10-28 13:29:21

音频源码audio

2011-04-18 11:00:34

使用音频BlackBerry
点赞
收藏

51CTO技术栈公众号