Tag Archives

12 Articles
指定した秒数で区切るツール Simple Wave Splitter

指定した秒数で区切るツール Simple Wave Splitter

Simple Wave Splitter

wavファイルを指定した秒数で区切るツールを公開しました。
JRE がインストールされた環境で利用できます。

デフォルトは、10秒+モノラルになっています。
sws_sc_1_1

使い方

1. 一番上の「ここにファイルをドラッグ&ドロップ」に、wavをドラッグ&ドロップします。うまくいくとファイル名が記入されます。
※wavファイルは、CD音質(44100Hz, 16bit, 2ch)がいいです。それ以外はテストしてません。
2. 「出力ファイル名」というのは、雰囲気が分かる人は設定してください。デフォルトのままでいいと思います。
3. 「区切りたい秒数」は単位は「秒」で秒数を指定してください。小数点も可能です。区切るときはこの秒数「以下」になります。
4. 出力ファイルはモノラルがいい方は、「出力ファイルをモノラル化」にチェック
5. 「カット開始」で、wavファイルがあるディレクトリに、カットされたファイルが作られます。

 

おまけとして、技術がたくさん詰まった素晴らしいプレイヤーで「試曲」ができます。

スーパーかっこいいビジュアライザーと、ハイクオリティなエフェクターを体感セヨ!
sws_sc_1_2

直接ダウンロード
他にこれまで作ったスバラシイソフトとかはこちら


裏話(技術ポイント)
・ビジュアライザーはソフトウェアレンダリングで実装してます!
・リバーブは反射音を自動作成後に、FFTで畳み込みの実装することで超高品質なリバーブを実現!

オーディオ用語を音響信号処理に置き換える

2ちゃんねるで有名な「電力会社の違いでも味付けに差がでる」と呼ばれるテキストがある。
これは、コピペと呼ばれている。同一文章をコピー&ペーストで張ることから呼ばれている。
なぜ、張られるのかというと、目的の一つにレスをもらいやすいというのがある。
まあそういう話はおいておいて、このテキストとはどんなものだろうか。
有名なので知っている人も多いかと思うが引用。

>電源コードを変えると音が変わるのはピュア界では常識です。
>私は発電所から専用線で我が家まで電力を引っ張り込んでいます。
>電線の材質は無酸素銅が最高ですよ。
>おかげで、ウチはミニコンですが、ハイエンドよりいい音がしますよ。
>
>ちなみに電力会社の違いでも味付けにサがでるよ。
>
>電力会社     長所      短所   お奨め度
>——————————————————————
>東京電力     バランス   モッサリ遅い    C
>中部電力    低域量感   低域強すぎ   A+
>関西電力    高域ヌケ   特徴薄い    B
>中国電力    透明感     低域薄い    B+
>北陸電力  ウェットな艶   低域薄い     A-
>東北電力    密度とSN   低域薄い    A+
>四国電力  色彩感と温度   低域薄い    A
>九州電力     バランス   距離感      C
>北海道電力   低域品質   音場狭い     B-
>沖縄電力    中高域艶   モッサリ遅い     A
>
>
>で、上は発電所から5Km地点での特徴。
>それより自宅~発電所間の距離が長いと上記特徴+マイルドの味付け
>短いと上記特徴+刺激的な味付けが加わるよ。

これが本当なのかどうか。
そういうことはここでは議論しない。
今回こういう長所・短所にかいてあるオーディオ用語を
DSPで再現できるならどうやって設計すればいいか考えたいと思う。
というわけで、まずは下調べとしてオーディオ用語
音響信号処理に置き換えたらどうなるんだろうかという観点から調べていきたい。


艶のある音

Sound Field ~オーディオのまとめ~音の艶 -つや- とはいったいなににまとめられた
超初心者のための質問スレッド★スピーカー編 46★より
>493 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2011/03/25(金) 00:08:03.80 ID:+oWIAQCQ
>音の艶とは言葉でいうとどのような事なのでしょうか?
>このスピーカーは艶っぽい音がでるとかって表現があったりしますが
>ぜんぜんわからなくて・・・・。
>例えば女性ボーカルの声でいうとどんな感じのものをいうのでしょうか??
>
>494 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2011/03/25(金) 00:29:20.62 ID:aVfXF9Ko
>音の艶を言葉で言うとおとのつやだと思うけど。
>極弱いエコーに近い感じだと私は思ってる、
>皆が皆単語に対して同じ内容を言ってるかは自信無い。
>
>
>495 名前: 名無しさん@お腹いっぱい。 投稿日: 2011/03/25(金) 00:35:22.85 ID:fD54j/Q2
>>>493
>「艶」ねえ。なんとなくわかるんだが説明しにくいわなあ。
>たとえば♪I’m issinng you~とか歌ったとき、
>①艶のない音・・・やっぱり、貴方がいなくて寂しいなあ(以前はすべて楽しかったのに・・・)
>②艶のある音・・・貴方がいない、すごく寂しい(考えただけで濡れてしまうの・・・)
>というふうに聞こえるような違いかなあ。
>
>再生音の特徴としては中音に特徴(的なピーク)があるんだろうねw
他には、動画として「艶のある音
音を聞いてみると、たしかに495の匿名希望さんの書き込み
中音(1000Hz~8000Hz?)を強調した感じなのだろうか。
他に調べてみたが、これ以上の情報は見つからなかった。
とりあえず、艶のある音とは、1000Hz~8000Hzぐらいの周波数帯域を強調した音とする。
ピーキングフィルタに通すことで実装可能。


ウェットな音

言葉通りに解釈すると、ウェットというのは濡れた音。
濡れているということは、文字が滲んだりする。
滲んだ文字は、画像信号処理で言えば、低域強調フィルタ(平均値フィルタ・ガウシアンフィルタなど)に相当する。
音声信号処理で言えば、低音が強い音だということだろうか。
と解釈したが調べてみると違うみたい。
DTM初心者の方の為の作曲講座ドライとウェットによれば
>DTMの現場ではよく【ドライ】と【ウェット】という言葉が使われます。
>
>【ドライな音】というのは、エフェクトがあまりかかっていない音、
>もしくは全くエフェクトがかかっていない音のことを表します。
>
>【ウェットな音】というのは逆に、
>エフェクトがたっぷりかかっている音のことを表します。
>この場合のエフェクトというのは、主にリバーブの場合が多いですね。
>
>つまり、リバーブをほとんどかけてない音が【ドライな音】で、
>リバーブをかけている音が【ウェットな音】と考えていいと思います。
ということだそうだ。
ちなみに、昔私が購入したZOOMのマルチエフェクタRFX-300説明書にも
「Wet Mute」「Dry Thru」などの単語が使われており、
企業でも使用しているしっかりとした専門用語であるといえる。
よって、ウェットな音はリバーブ処理をかけた音とする。
所で、もしもウェットな音からドライな音に変更したい。
と思った場合は、リバーブを消さないといけないので、
リバーブのインパルス応答を推定して、逆畳み込み処理を行う必要がある。
よって、非現実的な処理が必要であるため、無理な話だと考えよう。


特徴が薄い音

「薄い音」だけならば、
▼ピック総合スレ part11▲より引用
>202 : ドレミファ名無シド : 2008/07/23(水) 21:21:17 ID:m6yhtgw3 [4回発言]
>>>200亀か・・・俺には薄い音って言うかなんか均一な音に聞こえるから余り好きじゃないな。
>今思ったんだけど鳴り=アッタクっていう認識?
「均一な音」って画像信号処理で言えば、ヒストグラムの平坦化処理
音声信号処理で言えば振幅値ヒストグラムの平坦化なので、
薄い音とはコンプレッサー処理をかけたような音で代用できるのだろうか。
ただ、今回は「特徴が薄い音」である。
これは、音声に「何らかの特徴を付ける」というのが一般的(?)だが、これはそれを行わないという意味だろうか。
だとしたら、何も信号処理を行わなければ再現できると考えられる。


透明感のある音

CRAZY HALさんのサイト浸食HAL脳耳(みみ)通信 Vol.4/音の表現用語によれば
>透明感・S/N感・歪感・雑味:音の透明感は高いほど澄んだクリアな音ということになる。
>S/N感はシグナル(Signal)とノイズ(Noise)と割合で分母のノイズ(N)が
>低いほど全体として数値が高くなるからS/N感は高いほど一般的に音質は良好とされる。
>歪感は音の歪み具合でこれは低いほど元の音に近い正確な音(原音忠実)ということになる。
>歪みが負に目立つ場合は<雑味がある>などともいう。
>スピーカーの存在感の無化は透明感とは違うが、
>様々な音像がハッキリとクリアにきこえる音の場合は<音離れが良い>などともいう。
上記のことから透明感がある音は、S/N比が大きい音と考えられる。
ノイズを削除するために簡単な方法としてスペクトルサブトラクション法がある。
これは、あらかじめ音が含まれていないノイズ部分の音を、
楽曲の流れている区間の音に対して減算処理を行うことで実装する。
実際には、振幅スペクトル部分のみに減算を行い、位相スペクトルは原音のを利用する。
これは、常に同一の音量レベルとノイズが含まれているときに効力を発揮する。
これとは違いベイズ推定を利用した音声強調に、MMSE-STSA法があり、これは携帯電話で広く使われている。
なお、透明感のある音を簡単に楽しみたい場合は、
周囲の雑音を低減させるノイズキャンセラがついたイヤホンを使用すればよいと考えられる。

もう一つの参考として、芯が強くて透明感のある音を奏でる一押しスピーカー ELAC「180シリーズ」によれば
>透明感があり、音のレンジ感が広く軽快な音
>ELACの良さの一つは「透明感」です。音のレンジ感が広く、中高域がクリアです。
>低域が重々しくなく、軽快にリズムを刻みます。
>全体にわたってきわめて透明でありながら、芯がしっかりしているので、クラシックだけでなくポップス、現代曲にもマッチします。
透明感が、中高域の音量レベルのダイナミックレンジが広いことを指すようにも見える。
これはスピーカーの話なので、小さな音から大きな音まで、
低い周波数帯域以外では、再現性が優れている。
つまり低い周波数帯域以外では、周波数特性がフラットであるということなのだろうか。
逆に言えば、透明感がある音は、スピーカーの周波数特性がフラットならば、
低い周波数帯域の音量を下げたりすれば作れるのかもしれない。

他にもギターについての質問です。JAYWALKのような音(透明感のある音?)を出すにはによれば
透明感のある音とはコーラス処理をかけた音
などと、いろいろ揺れている。
ここは、真ん中のを採用したいと思う。
しっかりとした大学講師が言っているということで。
ローシェルビングフィルタに通すことで実装可能。
コーラス、スペクトルサブトラクションなど全てを実装するのも面白いかもしれない。


もっさりとした音

OTAKU-MOTIONさんの【オーバーヘッド型ヘッドホン】 PHILIPS SHL9500 レビューから引用
>音のバランスはおおよそフラット。細かく言えば低音寄りのかまぼこ。
>派手なドンシャリではないため全体的にもっさりとした音。
もっさりした音とは、低域の周波数帯域が他の帯域に比べて強調されているような音とする。
もっさりという言葉自体、重たいイメージがあり、
重たいものは固有振動の式でMが大きいため
低い周波数帯域という関連があると考えられます。
音声信号処理ではローシェルビングフィルタに通すことで実装可能。


エッジのある音

きんたこさんのデジタルでもアナログの音が楽しめる!から引用
>当時使っていたCDP(DENON DCD1650AL)の音に不満(良く言えばエッジのきつくない音、悪く言えばもっさりした音
先ほどのもっさりした音との関連で、
エッジのある音とは、低い周波数帯域に比べて、高い周波数帯域の音が大きな音とする。
エッジという言葉は、英語の鋭さであるため、速い周波数と関連があると考えられる。
画像信号処理では、鮮鋭化処理(ラプラシアンフィルタなど)に相当する。
音声信号処理ではハイシェルビングフィルタに通すことで実装可能。


色彩感と温度がある音

これは、四国電力の長所に書いてあるものである。
色彩感と、色温度のことだろうか。

色彩感とは、色の彩度を表してると考える。
彩度は、HSV色空間HLS色空間のSaturationであり、RGBの色から計算で求められる。
彩度大きいための条件には、他の色の交わりがないと考えられる。
これは白色雑音、つまりノイズが少ないと考えられないだろうか。

色温度とは、光の色を表していると考える。
色温度が大きいとするならば、青色っぽい感じを表すと考えられる。
可視光線で青色の波長は、赤色に比べて短い。つまり高い周波数を持っている。
よって、高い周波数成分が大きいことを表すのだろうか。
四国電力の短所の「低域薄い」もこのためだと考えれば納得がいく。

色彩感と温度が良いとはS/N比が大きく、さらに低域の周波数成分が抑えられているような音とする。

Java の Sound API を使用すると文字化けする問題について

Windows環境で、javax.sound.sampledを使用した以下のコード。

Mixer.Info[] mixerinfo = AudioSystem.getMixerInfo();
for(int i=0;i<mixerinfo.length;i++) {
	System.out.println("****\t"+i+"\t***");
	System.out.println(mixerinfo[i].getName());
}

上記のコードを利用すると、
ヘルプによれば

getName
public final String getName()
ミキサーの名前を取得します。
戻り値: ミキサーの名前を表す文字列

と、名前を取得できるはずです。
しかし、日本語環境の場合、ミキサーの名前に全角文字があると、文字化けした名前を取得してしまいます。


「Port スピーカー」 → 「Port ?X?s?[?J?[」
「Port ライン入力」 → 「Port ???C??????」
「Port マイク」 → 「Port ?}?C?N」
「Port SPDIF出力」 → 「Port SPDIF????」
「Port SPDIF入力」 → 「Port SPDIF?o??」
「Port 再生リダイレクト」 → 「Port ??¶???_?C???N?g」

ネットでこの問題を探してみると、
Java の Sound API を使用した際に文字化けが起こってしまう問題に関しての質問です。
のように困っている人もいたりします。

なぜこういう自体が起こっているかというと、
多分内部で文字コードの変換が適切に行われていないためだと考えられます。
海外では話題が見つからなかったことから、誰か教えにいかないと多分治らないです。

解決策として、例えば。
「Port ???C??????」
これに関して、

for(int i=0;i<x.length();i++) {
	System.out.println((int)x.charAt(i));
}

を実行すると

「 80 111 114 116 32 131 137 131 67 131 147 147 252 151 205」

となることから、?の部分でも、しっかりコードが取得できていることが分かるので、

一度byte[]に変換した後に、
ByteArrayInputStream で、このバイト列を入力ストリームとして、

ByteArrayInputStream is = new ByteArrayInputStream(binary);
String charsetName = "JISAutoDetect";
InputStreamReader inputreader = new InputStreamReader(is, charsetName);
BufferedReader br = new BufferedReader(inputreader);

みたいな形で文字を読みこめば、文字化けを治すことができます。
ByteBufferと、CharsetDecoderでも出来るかも。

ただ一つだけ問題があって分からないことがありました。
再生リダイレクト」が「??¶???_?C???N?g」のように文字化けをしていて、
実際の文字コードは、

「141 196 144 182 131 138 131  95 131  67 131 140 131  78 131 103」

となるはずが、charAtで取得すると

「141 272 182 131 138 131  95 131  67 131 140 131  78 131 103」

となってしまうのです。

「再生」が「141 196 144 182」のはずなのに「141 272 182」

196 0b11000100 0xC4
144 0b10010000 0x90

がなぜ

272 0b0000000100010000 0x0110

となってしまうのかが不思議です。

Google音声認識で流れる音

Google音声認識で流れる音

by なたで 0 Comments

iPod touchのグーグル音声認識を利用出来るアプリケーション

ここで、話した内容が認識されるんだけどたまに変な怪音が流れる。
録音した音

なんだろこれ。色々な子音が流れているみたいだけど。

最近のプログラミング状況

最近のプログラミング状況

先月はかなり忙しく、これからも忙しくなりそう。(_Σ_)
というか去年の年末より忙しい。
ひどいときは1週間の内に2回お泊りしたし。
本当にどうしてこうなった状態です。。。。゛(ノ><)ノ 

日記の方も書くネタがたまっていっていく一方で、
書く元気とか、やる気が中々でない状況。

そこで休みを利用して、作ったけど、事情で公開出来ないものとか、
公開するまでもないものとか、製作中なものとかの紹介で、消化していきます。
いつも通り全部Javaです。

A

よくあるwavプレーヤー。
とある理由で波形を取得したかったので、
wavファイルの解析から、出力デバイスへの出力まで1から制作。
一応、チャンネル数やサンプリング周波数は、2ch、44100Hz、16ビット以外でも再生できるようになっています。
いや、もしかしたら量子化ビット数は対応させてなかったかな。
もう作ってからひと月以上経つので、忘れ気味。
本当は、mp3とかも対応させたいけど、Javaだったら一度ライブラリ使ってwavに変換するしかないかな。
JavaのLGPLとかはよく分からないので、好きじゃないです。
GUIは、以前作ったsmfプレーヤー を流用。
あと波形から、FFTを利用した解析機能もついています。

B

剛体球の運動のシミュレーション。
簡易型ゲームに使用するような、めり込みを利用した当たり判定ではなくて、
速度ベクトルを持った球同士が、何秒後にぶつかるかを方程式を解いて判定しています。
(この方程式については、「実例で学ぶゲーム3D数学」が役に立ちました。)
そのため、速度をすごい速くしてもめり込んだり、通過することはほぼ絶対ありません。
衝突後に、球をどのように動かすかが、結構大変で3日間近くかかりました。
attochipさんに色々とお世話になりつつ、完成。
片方の球を止まった球だと考えるというのは、当たり判定も、衝突後の動きに関しても、同じですね。
これについては、いつか解説したいです。

シミュレーションということで、色々設定を変えたりしなきゃいけないです。
ですが、GUI作るのは面倒なので、HSP風な言語?で右側から指定するという形にしました。
凝ったものではないので、REPEAT文・GOTO文・IF文・変数・計算など使えません。
いわゆる指定された命令のみ使えるというものです。

こだわり機能として、左側の画面を、自由に拡大・縮小・回転・移動が出来ます。
ここは3D処理ではお馴染みのアフィン変換を利用してます。
ところで、Graphics2Dで線の太さを、実数で指定できるのは驚きました。
0.5とかに指定した場合は、色が薄くなり細くなります。

C

重さを持つ粒子同士にバネがついていると考えた場合のシミュレーション。
4次のルンゲクッタ法で多変数の2階微分方程式を解いています。
多変数はできたけど、2階っていうのが難しかったです。
上のは、境界が自由端になっています。
固定端は、両端の重さを無限大として考えればいいのかな。
適当に考えたので、違う可能性大だけど。うん。

GUIは、作品Bを流用。
拡大・縮小・回転・移動のオマケ機能もそのままついています。

D

ゲーム制作ツールと、3Dソフトウェアレンダリング関連。
3D描写に関しては、以前のバージョン(1月1日のブログ)から
・メタセコイアのデータインポート機能追加
・独自3Dモデル形式のインポート・エクスポート機能追加
・複数のデータのパッケージ化追加
・それにともなって、使い易いI/O関連のライブラリを作った。
・ハードグラウンド機能(90度のデコボコ)の追加
・バンプマップからの法線マップ生成の高速化(DirectX9シェーダプログラミングを参考)
・パーティクル描写の最適化(高速化)
・3D上の線と、表示画面とのクリッピングの追加(3各ポリゴンのクリッピングは未対応)
・反射マッピングの追加。(法線を0.5ずらしたものをテクスチャのUVに利用する例の方法。これを参考)
・水の表現の追加。(2つのノイズを一定時間ごとにずらし重ねたものを、UVに利用したり、法線に利用したり)
・なんかGUIに利用できるようなアイコン制作とその配置。
・簡易型のテクスチャの生成言語(以前作った画像処理ツールオレンジビューアを利用)
・パーリンノイズを利用して、2つのテクスチャを自然に合成とかできる。(SSの緑とレンガの中間のテクスチャ)

順調に進んでいる?ように見えますが、3月中旬から進んでません。
マップエディタには魔物が潜んでいます。気をつけてください。ヽ(^o^)丿

それはおいておいて、水の表現なのですが、
最初、次の用な感じで実装しました。
・ 2次元のパーリンノイズを2つ生成しておいて、それをずらし重ねて、波を表現。
※ずらし重ねるときに、小数点の場合も考えて補間法を用意しておく。
・ 上記で生成した波みたいなものを高さマップと考え、各頂点の法線を生成。(頂点の位置は固定)
・ 法線から、反射マッピング用のUV生成。
・ あとは、半透明で描写。

で、この方法。正直640×480じゃ30fpsはきついです。
最近のPCだといけると思いますが、その他のPCじゃかなり危険です。
描写部分のみをマルチスレッドで動かしてもです。
というわけで、結局妥協して、
テクスチャを利用しない(反射マッピングを行わない)、上記のSSのような感じになりました。

でもなんか、動作速度上の都合での妥協っていうのは自分的には悲しい感じがして、
グラフィックがもっと綺麗なのがいいなあって思ってきて、開発停滞中。
この先、オブジェクトの配置・描写とかの表示とかも考えると、いけるかなとか。
立ち絵的なものは、「g.drawImage」を使えばJavaの機能で、高速に描写できるから問題ないと思うけど。
とにかく、こういう事考えたりしていて、なかなか進まなかったりする。

JOGL使っておけばよかったかも。
シェーダ言語とか使ってみたいし。自影が表現できるシャドウマッピングとかやってみたいなあ。
その前に、やる気出したり時間を作ったり、という根本的な課題が。

話が変わりますが、saharanさんの「Jhun」がすごすぎる。

%d人のブロガーが「いいね」をつけました。