フリーソフトのページ

Upconv 0.0.3(2009/02/07記)

紹介

このソフトは Wave ファイルのサンプリングレートやビット数の変換を行うソフトです。音声ファイルのアップサンプリングとダウンサンプリングに対応しています。失われた高域の補間もできます。
CDからリッピングしたWaveファイルを48KHz、88.2KHz、96KHz、176KHz、192KHzに変換できます。 44.1KHzのファイルを96KHzに変換するような非整数倍のサンプリングレートへの変換もできます。

同種のソフトにWaveUpConverterや、FUSEがありますが、この分野は面白そうなので自作してみました。

バージョン

0.0.3

分類

フリーソフト(GPL)

OS

Microsoft Windows 95,98,ME,2000,XP,Vista,Windows7(予定)

公開日

開発中

スクリーンショット

upconvのGUIです。
upconvのGUI

高いサンプリングレートに変換したときに失われた高域部分の補間方法を選択できます。
efu氏作成のWaveSpectraで周波数表示した画面を以下にのせます。
補間しない場合(hfa=Cutoff)
高域をカットした場合

高域部分には正規分布に基づいたランダムデータを付加します(hfa=Level)
正規分布に基づいたデータ付加

高域部分には倍音成分を予想して求めたデータを付加します(hfa=Overtone)
倍音成分を予想したデータ付加

以下にhfa=Overtoneで補完したデータのスクリーンショットを紹介します(短形波、三角波、ノコギリ波、CDからリッピングしたデータ)。20kHzまたは、22kHzより高域のデータが補間したデータです。

1khzの短形波(サンプリングレート44100を88200に変換)
短形波

1khzの三角波(サンプリングレート44100を88200に変換)
三角波

1khzのノコギリ波(サンプリングレート44100を88200に変換)
ノコギリ波

CDからリッピングしたデータ(サンプリングレート44100を88200に変換)
CDからリッピングしたデータ

CDからリッピングしたデータを20kHzでカットしてから変換(20kHzを超えた部分から急激にレベルが下がっているので、20kHz以上をカットする指定でサンプリングレート44100を88200に変換)
CDからリッピングしたデータ

CDからリッピングしたデータを20kHzでカットしてから変換(20kHzを超えた部分から急激にレベルが下がっているので、20kHz以上をカットする指定でサンプリングレート44100を192000に変換)
CDからリッピングしたデータ

ダウンロード

Upconv 0.0.3はUpconv 0.3.xにバージョンアップしました。Upconv 0.3.xをお試しください。
サポート用の掲示板を開設しました。問い合わせはこちらからどうぞ。

以下の機能は調整中です。

upconv003はSampling rate:192000、Bit width:24、hfa:hfa1(Noise)、Output bit mode:Noise shapingがおすすめです。

upconv003のスクリーンショット
バージョン003

技術情報

■整数倍のサンプリングレート変換方法■

CDからリッピングしたデータを例にして説明します。一般的な方法は以下のとおりです(専門家ではないので間違いがあるかもしれません)。

データとデータの間に0値をパディングします。
2倍のサンプリングレートにする場合は、データの間に0を1つ。4倍のサンプリングレートにするには、データの間に0を3個パディングします。0をパディングするとサンプリング数が増えますが、波形データは下記のようにぎざぎざになります。
0をパディングしたデータ

そのままだと不必要な高い周波数のデータ(22kHz以上)が鏡面状に残ってしまうので、ローパスフィルターをかけて不要な高域をカットします。
一般的にはFIRフィルターやIIRフィルターをかけて高周波数部分を除去しますが、本ソフトではFFTアルゴリズムを使用して広域を削除します。

本ソフトで使用している方法は以下のとおりです

この処理では逆FFTをかけているので、周波数データは元の音声データに戻りますが、不要な高域部分のデータ(22khz~44khz)を生成しています。
なぜそうしているかですが、0をパディングした音声データからこの低域をカットしたデータを引き算すると、不必要な高域部分のデータのみ元データから引き算されて、 0Hzから22KHzの有効なデータが残ります。
この理由は不必要な高域部分のみデータを操作することにより、0Hzから22KHzの有効なデータに対してなるべく変化させないようにするためです。
本ソフトはFFTの計算に、優れたFFT用のライブラリ(fftw)を使用しています。
この段階で整数倍のサンプリングレート変換は終わりです。後は変換後のデータにノーマライズ処理をして終了です。

■非整数倍のサンプリングレート変換方法■

例えばCDで使われている44100のサンプリングレートの音声データをDVDで使われている48000のサンプリングレートにしたい場合は整数倍ではないので大変です。
思いつく方法は以下のようなものがあります

44100と48000の最小公倍数は大きい数なので、最小公倍数を元に計算するのは結構大変です。 本ソフトではFFTと逆FFTを使用してサンプリングレートを変換しています。例としてサンプリングレート44100のデータを48000にする場合で説明します。

この処理にて1秒あたりのサンプリング数が44100から48000に増えます。
仕組みとしては、44100個のデータをFFTすると22050個の有効なデータを得ることができます。
48000個のデータをFFTすると24000個の有効なデータを得ることができます。
2のべき乗以外の数でFFTをかけているのでFFTとは違っていますが、fftwはこのような数のFFTも可能です。
元データのサンプリングレートが44100なので、22kHz以上の高域データは含まれていないことになります。
つまり前半の0~22kHzまでに該当するデータが存在し、22kHz~24kHzまでは0でよいことになります。
なので、0~22kHzまでに該当するデータを44100のFFTで得てから、22kHzから24kHzに該当するデータを0として、 48000の数で逆FFTをかけると、きちんと48000個のデータを得ることができます。
このようにして得られた音声データの精度はどのぐらいかわかりませんが、普通に聞いても遜色のない音が得られています。

■高域の補間方法■

失われた高域データ(22kHz以上のデータ)を復元するためには、低域部分(0Hzから22kHz)のデータを利用して復元するしかありません。
いくつかの方法がありますが、専門家ではないのでまったく検討がつきませんでした。
いろいろ考えてみて、いくつかの方法を思いつきました。

世の中には1番目のものを実装してるのもあるようです。
まずはCDからリッピングした音声データの2倍以上のサンプリングレートで収録された音声データがオンラインで販売されていますのでこれを入手してみました。
海外のサイトですがhttp://www.linnrecords.comには著作権保護のかかっていない高音質な音声データがリストされており、販売されています。
これを入手してからwavファイルに変換しWaveSpectraで周波数表示してみました。

高品質な音声データの周波数解析
図の周波数表示の真ん中から右が22KHzから44KHzに該当する周波数のデータです。
この音声はバイオリンの音を強く含んでいるので倍音の成分が出ています。
これをCDと同じサンプリングレートにしてしまうと、真ん中から右部分の周波数のデータがすべて失われます。

本ソフトでは以下のような方法で補間しています。開発途中なので、劇的に変化した感じはありません。
VraisonのVC-48も所有していますが、そちらのほうが変化の度合いはわかりやすいです。

これ以外にも、局所的なうねりを出すために、周波数毎のパワーのレベルが低い箇所も求めて、生成したデータに付加しています

見た目はきれいに高域部分が生成されていますが本当に良くなっているのかを聞き分けるのは難しいです(22kHz以上の音声データなので聞こえないため)。

手法は改良中なのでいい音を目指してアルゴリズムを考えているところです。