开发者社区> 知与谁同> 正文

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

简介:
+关注继续查看

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);

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

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python 实现LSB算法进行信息隐藏 包含空域与变换域 JPEG信息隐藏算法 对PDF文件进行信息隐藏 基于卷积神经网络的隐写分析 Matlab SRM、SCA隐写分析
Python 实现LSB算法进行信息隐藏 包含空域与变换域 JPEG信息隐藏算法 对PDF文件进行信息隐藏 基于卷积神经网络的隐写分析 Matlab SRM、SCA隐写分析
25 0
LabVIEW读写各类格式图像的方法(基础篇—1)
LabVIEW读写各类格式图像的方法(基础篇—1)
323 0
带你读《C#神经网络编程》之一:快速预览
本书旨在为C#程序员使用神经网络、CNTK等C#库和TensorFlowSharp解决复杂的计算问题时,提供实践指导。本书从神经网络入门知识开始,详细介绍如何使用Encog、Aforge和Accord搭建一个神经网络,帮助你深入理解神经网络相关概念和技术,例如深度网络、感知器、优化算法、卷积网络和自动解码器。此外,还详细讲解如何向.NET应用程序中添加智能特性,例如面部和运动检测、对象检测和标注、语言理解、知识和智能搜索。
3215 0
惊!C++竟然还能有这种操作——高性能深度学习库(DLL)
C++也能玩转深度学习了?没错,高性能C++深度学习库(DLL)已经发布了,本文作者为了满足自己的需求,开发了支持C++接口的深度学习库。作者特意用了两个小例子让你见识一下C++也能玩转深度学习,而且玩的比其他库还要6!
5597 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
数据+算法定义新世界
立即下载
基于神经网络的语言合成
立即下载
低代码开发师(初级)实战教程
立即下载