科学音频处理(一):怎样使用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); 

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

作者:David Duarte

来源:51CTO

时间: 2024-10-16 01:05:27

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

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

Octave 是一个 Linux 上类似于 Matlab 的软件,它拥有数量众多的函数和命令,支持声音采集.记录.回放以及音频信号的数字化处理,用于娱乐应用.研究.医学以及其它科学领域.在本教程中,我们会在 Ubuntu 上使用 Octave 的 4.0.0 版本读取音频文件,然后通过生成信号并且播放来模仿在各种情况下对音频信号的使用. 本教程中关注的不是安装和学习使用安装好的音频处理软件,而是从设计和音频工程的角度理解它是如何工作的. 环境准备 首先是安装 octave,在 Ubuntu 终端

微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例_javascript技巧

本文介绍了微信小程序的开发,主要包括图片.录音.音频播放.音乐播放.视频.文件,具体如下: 图片: wx.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照. OBJECT参数说明: 注:文件的临时路径,在小程序本次启动期间可以正常使用,如需持久保存,需在主动调用 wx.saveFile,在小程序下次启动时才能访问得到. 示例代码: wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'],

Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能_Android

音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下Android他提供的录音类,实际上他有两个,一个是MediaRecorder,还有一个就是我们今天要用到的AudioRecord,那他们有什么区别呢? 一.区别 MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器.并且录制的音频文件可以用系统自带的Music播放器播放. 而AudioRecord录制的是P

科学音频处理(二):如何使用 Octave 对音频文件进行基本数学信号处理

信号叠加 两个信号 S1(t)和 S2(t)相加形成一个新的信号 R(t),这个信号在任何瞬间的值等于构成它的两个信号在那个时刻的值之和.就像下面这样: R(t) = S1(t) + S2(t) 我们将用 Octave 重新产生两个信号的和并通过图表看达到的效果.首先,我们生成两个不同频率的信号,看一看它们的叠加信号是什么样的. 第一步:产生两个不同频率的信号(oog 文件) >> sig1='cos440.ogg'; %creating the audio file @440 Hz >

视频转音频转换器如何将视频转成音频

  打开视频转音频转换器:狸*窩.全能.音视频.转换器;添加视频,把自己喜欢的一段视频添加进来:视频预览,可以预览一下视频文件是否是完整有效的;设置输出格式功能按钮是小三角形图样的;这个则是高级设置按钮. 点击小三角形图样的按钮,在弹出的上拉框中,选择"常用音频"让后再选择"MP3格式"可以看到预置方案已经为"MP3"了,就是输出格式变为MP3格式了. 点击""扳手按钮,进入高级设置界面,去掉视频,只保留勾选音频,就是把这段视

java音频播放示例分享(java如何播放音频)_java

这是一份精简后的代码,能够支持的格式十分有限. 复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java.io.IOException; import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound

视音频同步推送-是否有视音频裸流一起推送的例子?

问题描述 是否有视音频裸流一起推送的例子? SRS设计理念真好,我们很喜欢. 文章中给出单独推送H.264 及AAC裸流的例子,是否有视音频裸流一起推送的例子?因为实际中大多是视音频一起的. 解决方案 http://download.csdn.net/detail/ganhuanghuang/4984256 解决方案二: 谢谢! 我需要的是视音频裸码流同步推送,你推荐的是"SDL播放PCM音频裸流",不是一回事.

音频采集 音频分析-求一份 视频提取音频的代码

问题描述 求一份 视频提取音频的代码 之前在网上看到过有用MATLAB来实现音频提取的功能.但是经过测试.发现MATLAB用于提取简单的WORD文档的速度都是超过了容忍的极限.所以希望大神能够帮忙.希望能有别的代码来实现音频提取.

音频名称和长度-android 如何获取raw文件下音频的名称和时长?

问题描述 android 如何获取raw文件下音频的名称和时长? 我在res/raw文件下放了8个很短的音频,想把它们的名称和时长获取出来显示在一个listview中,如何获取它们的名称和时长呢? 解决方案 百度了一种方法,测试有用,记录下来,算是对问题的回答. 思路:遍历raw目录下文件,可以获取文件的id和名称(根据id拼接出音频资源的uri):通过MediaPlayer获取音频的duration. 主要代码如下: Field[] fields = R.raw.class.getDeclar