サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
yukara-13.hatenablog.com
音のタイムストレッチとピッチシフト (1)リサンプリング (1)音のタイムストレッチとピッチシフト:【リサンプリング】 - 音楽プログラミングの超入門(仮) (2)波形領域 この記事 (3)フェーズボコーダ [Flanagan & Golden, 1966] 予定 (4)反復STFT [Griffin & Lim, 1984] 予定 別々にやりたい前回は、再生速度とピッチが同時に変わるリサンプリングを紹介しました。しかし、今の時代、タイムストレッチとピッチシフトを別々にできないとあまり使い物になりません。そこで、今回以降はそれを可能とする技術を紹介していきます。 波形領域での処理今回扱うのは、波形領域(時間領域)での処理です。つまり、入力された音響信号をそのままイジって、タイムストレッチやピッチシフトに挑戦します。 波形領域での処理に関しては、超絶分かりやすいページを発見したので、参考にし
photo by Grantボーカル抽出 世の中に存在する多くの楽曲は歌声(ボーカル)と伴奏から構成されています。例えば、普段街中で聴くJポップなどはほとんどがボーカル入りの楽曲です。このボーカルと伴奏を分離するタスクを、一般的にボーカル抽出であったり歌声分離などと呼びます。 ボーカル抽出は、1. カラオケを利用したボーカル抽出、2. ステレオボーカル抽出、3. モノラルボーカル抽出の三種類に大別されると考えています。一つ目はボーカルを抽出したオリジナルの音源とそのカラオケ音源が手元にある場合の抽出法で、基本的にはオリジナルからカラオケの差分を取ることでボーカルを抽出します。二つ目はオリジナル音源がステレオである場合の抽出法で、歌声が中央に定位していることを利用して抽出を行います。三つ目はオリジナル音源がモノラルである場合の抽出法で、最も難しいタスクです。 ボーカル抽出のため、多くの無償・
※ iSTFT の実装が間違っていました。というよりも、スペクトログラムをイジらない場合しか滑らかな再合成ができない不適切な実装となっていたので、まともな(ロバストな)実装に変えました。(今のところ)一番需要がありそうな記事で残念過ぎるミスを犯してすいません・・・。 (2014, 2/7) 周波数(スペクトル)の時間変化を見る少し前に音響信号を周波数スペクトルに変換するフーリエ変換を扱いました。 Pythonでフーリエ変換(と逆変換) - 音楽プログラミングの超入門(仮) ここで、例えば市販曲などの3分程度の音響信号の周波数を分析することを考えます。この音響信号全体をフーリエ変換して得られたスペクトルはあまり意味がありません。このような長い音響信号では、ある時間ではドの音が鳴っていたり、別の時間ではラの音がなっていたりしますが、それらが全部ごちゃまぜで解析されてしまうからですね。各時刻のス
photo by Jared Tarbell 特異値分解とは? 特異値分解 - Wikipedia SciPyの特異値分解 SciPyには特異値分解のための関数が2種類入っています。 scipy.linalg.svd scipy.sparse.linalg.svds 前者(svd)が一般的な特異値分解、後者(svds)がスパース行列に対する特異値分解の関数となっています。しかし、おそらく svds は別の場面で使う場合が多いのではないでしょうか。 svd では全ての特異値を計算するのに対し、svds では上位 k 個の特異値のみを計算させるオプションが存在します。当然、k が小さいほど計算は速く終わるため、スパース行列でなくても、上位の特異値のみが必要な場合は svds を使ったほうが圧倒的に計算が速いことが多いです。 PROPACK SVD のスピードについて調べているときに下のような記
音声信号処理を行う場合、大抵、数値列をWAVファイルから読み込むことになると思います。Python でそれを行う方法を2つ紹介します。 waveモジュールを使うwave モジュールはその名の通り、WAVファイルを扱うためのモジュールです。WAVファイルの読み込みはこんな感じにします。 # -*- coding: utf-8 -*- import wave from scipy import fromstring, int16 wavfile = "./test.wav" # WAVファイルを開く wr = wave.open(wavfile, "rb") # WAVファイルの情報を表示(別にいらん) print "Channel num : ", wr.getnchannels() print "Sample size : ", wr.getsampwidth() print "Sampl
photo by Ryan Johnson 自分がググり倒した成果を書き連ねています。 この記事では、主にLinux環境を前提としているので注意してください。 WindowsやMacでも同じような感じでいけるかも知れないです。 スタンドアロン アプリケーションPythonはスクリプト言語であるため、インタプリタがインストールされている環境でしかプログラムを実行することができません。さらに、プログラムに外部パッケージ(Numpy、Scipyなど)を使用している場合は、それらのインストールも必要となります。 一方、C++やJavaなどのコンパイル言語では、ソースコードをバイナリコードへコンパイルするため、大体どのような環境でも動かすことが可能です。 しかし、Pythonをメインで使っているプログラマとしては、Pythonのコードもどのような環境でも動くスタンドアロンアプリケーションに変換したい
導入:データの次元削減 主成分分析の目的 主成分分析(principal component analysis,PCA)とは一体何でしょうか?PCA には大きく分けて二つの目的があります。(表していることは同じですが) データの特徴をよく表す新しい指標を見つける 大きな次元のデータを小さな次元に落とす データの次元が大きすぎて、計算にやたら時間がかかる場合とかによく使ったりします。 多次元のデータを解析する 世の中に存在するデータは多次元のものがほとんどです。各次元の値は特徴量と呼ばれたりします(呼ばせてください)。例えば、「人間」というデータは、“身長”、“体重”、“年齢”、“名前”などの特徴量を持っています。これが学生であれば、各科目のテストの点数なども含まれるかもしれません。 もし、この特徴量の中に“目の数”が含まれていたらどうでしょうか。これはほとんど意味がないですよね。このように
スペクトログラム表示短時間フーリエ変換を行うことで、スペクトルの時間変化を表したスペクトログラムを得ることができます。 Pythonで短時間フーリエ変換(STFT)と逆変換 - 音楽プログラミングの超入門(仮) この記事で、スペクトログラムを matplotlib.pyplot.imshow でそのまま表示していますが、すごい見にくいです。こんな感じ↓ 高周波成分とか全部見えないし、そもそも色合い的にも見づらいという感じで、図として使い物になりません。 sox とかいう有能な sox という CUI ベースの音声編集ソフトウェアがあります。 SoX - Sound eXchange | HomePage これは、Linux、Windows、Mac など様々なプラットフォームに対応しており、例えば Ubuntu の場合でしたら、以下のように簡単にインストールができます。 sudo apt-g
導入:インパルス応答と残響 インパルス応答(英: Impulse response)とは、インパルスと呼ばれる非常に短い信号を入力したときのシステムの出力である。インパルス反応、重み関数 (weighting function) とも。インパルスとは、時間的幅が無限小で高さが無限大のパルスである。実際のシステムではこのような信号は生成できないが、理想化としては有益な概念である。 http://ja.wikipedia.org/wiki/インパルス応答 (^^;)< ちょっと何言ってるか分かんないです。 と感じた人も少なからずいるのではないでしょうか? ですが、インパルス応答はイメージをつかんでしまえば、それほど難しいものではありません。ここで、簡単に説明しましょう。 インパルス応答 まず、下図みたいな信号を(単位)インパルスといいます。 時間 0 のところが 1 になっているだけの信号です
関連記事 高速な Constant-Q 変換 【Python】 高速な Constant-Q 変換 (with FFT) - 音楽プログラミングの超入門(仮) 導入:対数周波数スペクトログラム Pythonで短時間フーリエ変換(STFT)と逆変換 - 音楽プログラミングの超入門(仮) 上記の記事で,音響信号を周波数スペクトルの時間変化を表すスペクトログラムに変換する短時間フーリエ変換を扱いました.簡単にアルゴリズムを復習すると,音響信号を一定の幅で切り取ってフーリエ変換するという処理を少しずつずらして行っていくことでスペクトログラムを得ていました. ここで,音響信号を一定の幅で切り取ってフーリエ変換するということについて少し考えてみましょう.切り取られた信号が以下のようなものであることを考えます. 窓幅が 256 サンプル(fs=4[kHz])で、ここでは信号を 1000[Hz],400[
音響信号のフーリエ変換ここでは、離散フーリエ変換のみを扱っています。 信号処理においてフーリエ変換というと、ほとんどの場合、離散フーリエ変換を指しています。 式 フーリエ変換は可逆変換なので、逆変換があります。フーリエ変換・逆変換の定義式はこんな感じです。 ここでは、 が入力音響信号ですね。 つまり何をしているのか 上の式をぱっと見ても、何やこれよく分からん、という人が多いんじゃないでしょうか。 音響信号のフーリエ変換では、その音の中に何ヘルツの正弦波がどのくらいの大きさ(振幅)で入っているかと、その位相が分かります。もっと簡単に言うと、どの音の高さがどのくらい強く鳴っているかが分かります。 それさえ分かっていれば、深い話に突っ込んでいかない限り、大丈夫でしょう、多分。 何ヘルツまで解析できるのか 信号がサンプリング周波数で標本化されているとき、その半分未満の周波数成分しか完全に再現するこ
導入 スペクトルアナライザ スペクトルアナライザというものを知っているでしょうか?かなり色々あると思いますが、ここでは単純に入力された音のスペクトルをリアルタイムで表示するシステムを考えます。Windows Media Player のエフェクトにもそれっぽいものがありますね(下図)。 Requirement プロットが遅い matplotlib やはりリアルタイムで表示するからにはぬるぬる動いてほしいですよね!! Python でのプロッティングといえば、matplotlib がメジャーだと思います。実際、matplotlib でもリアルタイムに表示を更新していく仕組みはあるので、スペクトルアナライザを実装することは可能です。しかし、matplotlib には弱点があり、プロッティングがめちゃくちゃ遅いんですね。そのため、表示が音に対してどんどん遅れていったり、もしくは凄くカクカクな表示
全自動 Makefile プロジェクト毎に Makefile を書きなおすのが面倒くさかったので、ディレクトリ以下のソースファイルの依存関係などを自動で解決してコンパイルしてくれる Makefile を作りました。 ちなみに全自動というのは嘘です。すみません。 外部ライブラリのパスなどは自分で指定する必要があります。 あと、make から外したいディレクトリなどは各位で編集してください。 制約条件として、ソースファイルが全て Makefile の置いてあるディレクトリ以下にある必要があります。個人的に必要なソースファイルはサブモジュールなどとして全てディレクトリ以下に置いてしまうことが多いので、そんな感じになってます。 Makefile - Github of yukara-ikemiya 少し書きなおせば、静的/動的ライブラリの作成用にも使えます。 filter, filter-out
このページを最初にブックマークしてみませんか?
『音楽プログラミングの超入門(仮)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く