NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

textファイルからwavファイルへの変換について

以前に、"yama"さまも同じことを投稿されたと思うのですが、
自分でやってみてよくわからなかったので、どなたか詳しくご指導下さい。
 
LabVIEW7.0の環境で、サンプリング100kHzで集録した
打撃音データ(textファイル)をwavファイルに変換したいと思っています。
 
yamaさまの投稿に返信された"小澤@東北大学電気通信研究所"さまの
回答では「下記の図で示されているLabVIEWの標準関数で可能です」
と書かれていますが、どの関数を使ったらよいのかわかりません。
 
「サウンド波形ファイル書き込み」という関数があるので、
これかなと思ったのですが、波形を入力する際の「波形ファイルパス」は、
波型ファイル(.wave)なので、textファイルを入力できません。
 
どなたかご教授していただけないでしょうか?
 
 
 
0 件の賞賛
メッセージ1/6
11,383件の閲覧回数

必ずしも完全なご提案にはなりませんが、まず最初に、
(1)数値がTEXTで書かれたファイルから、直接.wavに変換する関数は
 無いと思います。
(2)Snd Write Wave File.viにつなぐファイルパスは、これから
 書き込もうとする.wavファイルを意味します。

それで、御所望の動作をするには、少なくとも「TEXTファイル入力→
内部の数値配列→数値の変換→.wavファイル出力」という手順が必要で、
(1)数値がTEXTで書かれたファイルを読み込んで、数値配列に
 しないといけません。例えば、Read From Spreadsheet File.viを
 使って配列に読み込んだり(形式が丁度合えば)、あるいは、
 Read Characters From File.viなりを使って自分で文字列から
 数値に変換していくなどして、テキストファイルのデータの並びに
 応じて、自分で数値の配列にする必要があります。これは、
 テキストファイルでの数値の書かれ方にある程度依存しますので、
 一般的な書き方は示せません・・
(2)次に、データのサンプリングが100kHzということなので、.wavに
 対応する44100Hz、22050Hz、11025Hz、8000Hzのいずれかにダウン
 サンプリングしないといけません。これは補間が要るので結構面倒?
 8000Hzなら25個のデータから2個のデータを作ることになるので
 多少ラクかも知れません。もし、.wavにした時に聞こえる音の高さが
 変わっても良ければ、そのままデータ列を使っても良いですが・・
(3).wavファイルの8bit形式にするか、16bit形式にするかに応じ、
 8bitで出力なら、最低値0、最高値255に(U8)、
 16bitで出力するなら、最低値-32767、最高値32767(32768?)に(I16)、
 なるよう、値を換算します。音の無いときのデータを、8bitなら
 127(128?)、16bitなら0にし、かつ最大振幅のときで上記範囲を
 超えないように、適当な係数を掛けます。
(4)モノラルで出力するならデータ列は1次元で良いです。
 (ステレオにするほどのことはない?)

このようにして初めて、Snd Write Wave File.viの、
モノラル8bit/モノラル16bit/ステレオ8bit/ステレオ16bitの
いずれかの配列入力にデータを接続することができます。
かつ、その形式とサンプリング周波数に合うデータ形式を、
「サウンド形式」入力につなぎます(端子右クリック「作成」で
「定数」を作り、ENUMで値を選択するとラク)。

もしかしたらもっと賢い方法があるのかも知れませんが、
知る限りでは最終的にSnd Write Wave File.viにつなぐ前に
いろいろ処理が要りそうな気がします・・

以上、ご参考まで。

ちる <x@no.email> wrote:
>以前に、"yama"さまも同じことを投稿されたと思うのですが、
>自分でやってみてよくわからなかったので、どなたか詳しくご指導下さい。
>&nbsp;
>LabVIEW7.0の環境で、サンプリング100kHzで集録した
>打撃音データ(textファイル)をwavファイルに変換したいと思っています。
>&nbsp;
>yamaさまの投稿に返信された"小澤@東北大学電気通信研究所"さまの
>回答では「下記の図で示されているLabVIEWの標準関数で可能です」
>と書かれていますが、どの関数を使ったらよいのかわかりません。
>&nbsp;
>「サウンド波形ファイル書き込み」という関数があるので、
>これかなと思ったのですが、波形を入力する際の「波形ファイルパス」は、
>波型ファイル(.wave)なので、textファイルを入力できません。
>&nbsp;
>どなたかご教授していただけないでしょうか?
>&nbsp;
>&nbsp;
>&nbsp;

0 件の賞賛
メッセージ2/6
11,375件の閲覧回数
白石様

丁寧で大変詳しい説明ありがとうございます。
私が思っていたよりも作業は複雑なようですね。
白石様がおっしゃった通りに試してみたいと思っております。
やはり100KHzでの変換は難しそうですね。

また、わからないことがありましたら、
ご教授させていただくことがあるかと思いますが、
そのときはどうか宜しくお願いいたします。
0 件の賞賛
メッセージ3/6
11,359件の閲覧回数
 もし作成したファイルをLabVIEWで再生するのではなくWIndwsに添付されているMediaPlayer等で再生させるのであれば、
サンプリングレートを8000Hz,11025Hz,22050Hz,44100Hz以外でも自由に設定する事が可能(なはず)です。
 
 詳しくはインターネットでWaveフォーマットの仕様を調べられる事を推奨しますが、要点をあげますと、
 
①とりあえず8000Hz,11025Hz,22050Hz,44100Hzのいずれかでファイルを作成する。
②作成したファイルをバイナリで読み込み、24バイト目からの4バイトがサンプリングレートを示しているので目的のレートに変更する。
 続く4バイトが転送レートを示すので、サンプリングレート×チャンネル数(モノラル:1、ステレオ:2)×分解能(8ビット:1、16ビット:2)の値に変更する。
③保存する
 
以上で好きなレートで再生できるようになるので、ダウンサンプリングの必要はなくなります。
ただし100kHzだと普通のPCに載っているサウンドボードでは高周波数部分は除外されて再生されるかもしれません。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 件の賞賛
メッセージ4/6
11,360件の閲覧回数

koyasu 様

サンプリングレートの変更方法をご教授いただき、まことにありがとうございます。

早速、試してみたいと思います。

作成したファイルはLabVIEWではなくても、メディアプレイヤーでも、出力できればいいのです。

一応、サウンドボードはPC標準装備のものではなく、別途に取り付けたものです。

が、100KHzの高周波を出力できる性能があるのかは微妙といったところです。

これからまたわからないことがありましたら、どうか宜しくお願いします。

 

0 件の賞賛
メッセージ5/6
11,309件の閲覧回数

ちる <x@no.email> wrote:
>一応、サウンドボードはPC標準装備のものではなく、別途に取り付けたものです。
>が、100KHzの高周波を出力できる性能があるのかは微妙といったところです。

仮に出力できても、人間の耳は約20kHz程度の周波数の音までしか聞くことが
できませんので、そこで20kHz以上はカットされたのと同じになります。
(100kHzサンプリングだと、音では50kHzの周波数の音に相当しますが、
 20kHz〜50kHzの音は人間には聞こえない)

そういう意味で、100kHzサンプリング(50kHz周波数の音に相当)のまま
使用しても、44.1kHzでダウンサンプリング(22kHz周波数の音に相当)しても、
人間の耳に聞こえる感じは変わりないかと・・・
(そもそもCDや.wavが44.1kHzサンプリングなのもそこに由来しますので。
 ある種の臨場感は20kHz以上の不可聴音波が影響しているとも言われていますが・・)

従いまして、普通にサウンドボードとして使えるものなら問題ないと思いますし、
100kHzの高周波を十分に出力できるものをお求めになる必要は無いかと思います。

以上、御参考まで・・

0 件の賞賛
メッセージ6/6
11,311件の閲覧回数