音声の基本

Wolfram言語は,Wolfram言語のパワフルな数学およびアルゴリズム機能と完全に統合した,プログラム的でありインタラクティブでもある音声処理に対する組込のサポートを提供している.サウンドファイルを生成してインポートしたり,組込み関数を使ってそれらを操作したり,線形および非線形フィルタを適用したり,多様な方法で可視化することができる.
音声の作成と表現
音声オブジェクトは数値配列,ファイル,URLから生成することができる.
Audio[data]
data によって与えられたサンプルでインコアの音声を作成する
Audio[file]
file からアウトオブコアの音声を作成する
Audio[url]
url からアウトオブコアの音声を作成する
Import[file]
file から音声をインポートする
AudioGenerator[model]
さまざまな振動とノイズを作る
音声生成関数
音声オブジェクトを作成する最も簡単な方法は,から1までの実数ベクトルをAudio構造で囲むことである.
次は数値のベクトルから作成された1チャンネルのインコアの音声である:
この他にも,ローカルのファイルシステム上,あるいはアクセス可能なリモートの場所にあるファイルから,アウトオブコアの音声オブジェクトを得るという方法もある.アウトオブコアの音声オブジェクトはサンプルをメモリに保存しない.
以下は,Wolfram言語のドキュメントディレクトリExampleDataからアウトオブコアの音声オブジェクトを生成し,そのオブジェクトによって内部的に使われるバイト数を表示したものである:
Importを使って,ファイルまたはURLからインコアの音声オブジェクトを生成することができる.
以下は,インコアの音声オブジェクトを生成し,そのオブジェクトによって内部的に使われるバイト数を表示したものである:
ExampleData"Audio"コレクションにはサンプルの音声クリップが含まれている.
以下で,利用可能な音声クリップをリストする:
指定された音声オブジェクトの特性をリストする:
すべてのタイプのSoundオブジェクトは,Audioに変換することができる.
MIDIサウンドを音声に変換する例である:
生成された音声の波形を見る:
以下は,SampledSoundFunctionで表現されたサウンドを音声に変換する:
AudioGeneratorを使うと,さまざまな振動とノイズを作ることができる.
以下は,正弦波の音声を生成する:
次は,1秒間のピンクノイズを生成する:
音声の特性
次の関数を呼び出すと,音声オブジェクトの有用な特性を得ることができる.
AudioLength[audio]
audio オブジェクト中のサンプル数を返す
Duration[audio]
audio の持続時間を秒で返す
AudioChannels[audio]
audio のデータに存在するチャンネル数を返す
AudioSampleRate[audio]
audio に関連付けられたサンプルレートを返す
AudioType[audio]
audio の各サンプル要素に使われる値のタイプを返す
音声の特性
以下は音声の長さ,継続時間,チャンネル数,サンプルレート,データタイプを返す:
サンプル値の配列は関数AudioDataを使って抽出することができる.デフォルトでは,この関数は実数値を返すが,オプションの"type"引数を使うと,指定されたタイプで求めることができる.
次は,範囲から1にスケールされた実数値のベクトルとして,インコアの音声の一部を返す:
次は,範囲127から128までの整数のベクトルとして,アウトオブコアの音声から同じ部分を取り出したものである:
マルチチャンネルの音声の場合,Rawのサンプルデータはチャンネル値のリスト(2D配列)によって表される.
次は,アウトオブコアのマルチチャンネル音声オブジェクトを作成し,その一部をチャンネル値のリストとして抽出する:
多チャンネル音声オブジェクトは,1チャンネルの音声オブジェクトのリストに分割することができる.逆に,任意数の1チャンネルの音声オブジェクトから多チャンネル音声オブジェクトを作成することもできる.
これは例題のステレオ音声オブジェクトを2つのモノラル音声オブジェクトに分割する:
2つのモノラル音声オブジェクトからステレオ音声オブジェクトを生成する:
音声の可視化
音声はさまざまな方法で可視化することができる.
AudioPlot[audio]
audio の波形をプロットする
Periodogram[audio]
audio の離散フーリエ変換の振幅の二乗(パワースペクトル)をプロットする
Spectrogram[audio]
audio のスペクトログラムをプロットする
音声の可視化関数
音声信号の波形をプロットする:
音声信号の無音の部分をハイライトする:
音声信号のピリオドグラムをプロットする:
長さ512,オフセット64のパーティションを使って,音声信号のスペクトログラムをプロットする:
基本的な操作
有用な音声処理タスクの多くは,2つの音声オブジェクト間,あるいは音声オブジェクトと定数間の簡単な算術操作しか必要としない.例えば,音量を変更する場合は,音声オブジェクトに定数因子を掛けるか,音声オブジェクトに定数を足すか,音声オブジェクトから定数を引くかする.この目的で,NumericFunctionあるいはListableという属性を持つWolfram言語の演算子と関数のすべては,音声オブジェクトが使えるように多重定義されている.
audio1+audio2
2つの音声オブジェクトを足す
n*audio
スカラーに音声オブジェクトを掛ける
Mean[{a1,a2,}]
音声オブジェクトのリストの平均を計算する
音声オブジェクトに対する算術操作および統計操作の例
以下は,2つの音声オブジェクトの線形結合を生成する:
以下は音声オブジェクトのリストの平均を計算する:
音声オブジェクトの統計量を計算する:
"IndeterminateValue"というシステムオプションは,算術操作で得ることのできる値を置き換えるのに使うことができるが,音声オブジェクトに保存することはできない.これにはComplexInfinityIndeterminateが含まれる.
次は"IndeterminateValue"オプションの現行の値を表示して,それを2に変更する:
次は,"IndeterminateValue"をどのように使って,算術操作の結果にある,取ることのできない結果を置き換えるかを示す:
算術操作の結果に含まれる複素数は,それらの値の実部に置き換えられる:
"IntermediateValue"をもとのデフォルトのゼロに戻す:
選択,削除,充填等によって音声の継続時間を変更する操作について考えてみよう.このような操作はいろいろな目的に役立つ.選択や削除により,大きいファイルの一部から新しい音声オブジェクトを生成することができる一方,充填は音声オブジェクトの最後を拡張するために使われ,多数の音声処理タスクで最後のサンプルも一様に扱われるようにする.
AudioTrim[audio,{t1,t2}]
t1から t2までのサンプルのみからなる音声オブジェクトを返す
AudioPad[audio,m]
m 秒間の無音を音声の両側に加える
AudioDelete[audio,{t1,t2}]
t1から t2までを削除する
AudioSplit[audio,{t1,t2,}]
時間 tiaudio を分割する
AudioPartition[audio,dur,offset]
audio を重複のある部分に分割する
AudioIntervals[audio,crit]
基準 crit を満たす音声区間を返す
基本的な音声操作の例
音声オブジェクトの1秒目を選ぶ:
次は,音声オブジェクトの最後に適用される異なる充填方法を示す:
下では,音声オブジェクトの最初と最後から無音の部分を削除する:
音声オブジェクトの1秒目から3秒目までの間のサンプルを削除する:
音声オブジェクトを半分に分割する:
音声オブジェクトを重なり合わない部分に分割する:
次は音声オブジェクトを,重なりを含んだ部分に分割する:
音声オブジェクトの対応するブロックを抽出するために,さまざまな基準を満足する区間を計算し,利用することができる.
最大値がより大きく,スペクトル中心の値が800より小さい区間を計算する:
上で計算された区間に対応する音声オブジェクトを返す:
音声オブジェクトのサンプルレートをリサンプリングして変更したり,何らかの方法で音声サンプルを正規化したりすることが必要な場合がよくある.このような基本的なタスクを実行する関数も準備されている.
AudioResample[audio,sr]
サンプルレートが sr になるようリサンプルされた音声オブジェクトを返す
AudioNormalize[audio]
サンプルの最大絶対値が1になるように audio を正規化する
AudioAmplify[audio,s]
audio の全サンプルを s 倍する
音声オブジェクトのリサンプリング,正規化,増幅
例題の音声のサンプルレートを8000に変更する:
音声のサンプルを正規化する:
音声オブジェクトの大きさを増幅させる:
Wolfram言語は,音声オブジェクトのリストに対する操作を実行する関数も提供している.
AudioJoin[list]
音声オブジェクトのリストを連結する
AudioOverlay[list]
音声オブジェクトのリストを重ねる
ConformAudio[list]
リストの各音声オブジェクトの特性を適合させる
音声オブジェクトの連結,重ね合せ,適合
2つの音声信号を連結する:
2つの音声信号を重ねる:
2つの音声信号を適合させる: