もう少し詳しくデータについて書き込みます。
0x25555464というデータを一つの値として読み込みを行うにはどのようにしたらいいの
でしょうか??
RAWという拡張子やDATという拡張子の中に沢山のデータが入っているものとして考えて
います。
皆さんに細かく教えていただき幸いに思っています。まだ、完成には程遠いのですがよ
ろしくお願いします
入力元データのフォーマットどうなっているんですか
RAWとDATではフォーマット(データの並び)違うと思いますけど
拡張子に関係なく変換したいのでは無いのですか
またそれがどういう意味を持っているのか分かりませんけど?
また、最初は十進だったけど、今度は16進ですか
取り合えづバイナリなりテキストなりで読み込んで
バイトを区切って変換すればよいのではないですか
仕様の確立してから分からない部分を明確にして再質問してはどうですか
皆さんおおざっぱ過ぎてどう解答して良いかわかんないと思います
char* をint へ変換する関数がCランタイムの中にあります。
atof、atoi、_atoi64、atol
これらを使えば、十分読み込めます。
どうしても、わからなければ入門書を参考にしてください。
その一つのデータ0x25555464を0x2555というデータと0x5464というデータに分けるには
どのようにしたらいいのでしょうか??
WAVEの構造体は理解していますが、うまくプログラムを作成できなくて悩んでいます。
参考程度に教えてください
単純にcharで読むのはだめなんですか
共用体使ってみてはどうですか
もう少し基本を勉強してみてはどうでしょう?
後々必ず役立つと思いますが。。。
>WAVEの構造体は理解していますが、うまくプログラムを作成できなくて悩んでいます。
そうですね。
まず、WAVEファイルを書き出すクラスを作ってみましょう。そっちの方が
後で使うときは便利です。私はWin32API好きなのでランタイム関数は
あまり使いませんので、fopen や stream なり、好きに書き直してください。
メンバ関数に[データ部]の読み書きができる関数を作ると便利です。
メンバ関数は
public:
CreateFile(DWORD samplePerSec, DWORD channel, DWORD bitPerSample);
Close();
Read(char* pBuf, size_t ReadSize); // データ部をよみこみます
Write(char* pBug, size_t WriteSize); // データ部へ書き出します
メンバ変数は
WAVEFORMATEX* mlpWfx; // 可変サイズの構造体なのでかならずヒープで確保する
DWORD m_SizeOfFile; // ファイルのサイズ
DWORD m_SizeOfData; // データのサイズ
protected: // 内部関数
HANDLE hFile; // ファイルハンドル
// API ラッパー
CreateFile_API();
Read_API();
Write_API(char* pBug, size_t WriteSize);
(戻り値を省いたので適当に返してください)
フォーマットは以下のようになってますから
'RIFF'
ファイルサイズ
'WAVE'
'fmt '
WAVEFORMATEX構造体のサイズ
'data'
リアルデータ部のサイズ
サイズは DWORD か unsigned int で
''の4文字は char[4] かな。
ヘッダーはファイルサイズやデータ部のサイズがあるので
ヘッダーのサイズだけダミーデータを書き込むようにして
Close 関数が呼ばれたときに全体のサイズを集計して
ヘッダーを書き直してせばよいかと。
本来 mmio を使うようなのですが mmio の方が楽なのでしょうか。
分かりませんが。私は自前でがんばりましたが・・・。
DirectShowのWAVE File Writer を使う手もありますし、
検索すれば WaveFile の入出力関数、クラスのサンプル
ぐらい出てきそうですが・・・。
よろしければ、細かくサンプルプログラムを頂けたら幸いです。
まだ完成にはいたって降りません。
まだ沢山聞くことがあると思いますがよろしくお願いします
RAWというファイルの中身が
0x5265ABFF 0x12348789 0x54878888 ・・・・・・・・・・・・・・・
になっています。
これを一つのデータを読込むにはどのようにしたらいいのでしょうか??
あと、例えばこの数値(0x5265ABFF)を 0x5265 と 0xABFFに分けるにはどのようにし
たらいいのでしょうか??
参考程度にプログラム例も教えていただけたら嬉しいです。
うーん、簡単な文字列操作だと思いますが。
0x5265ABFFの文字列を配列の箱にれると下のように
なります。
-----------------------------------------
| 0 | x | 5 | 2 | 6 | 5 | A | B | F | F |
-----------------------------------------
10文字なので10個の char 配列を用意します。
先頭の 6 文字だけコピー他の char 配列にコピー
すれば 0x5265 を取れます。そして残りの ABFF
も取り除いて 0x を先頭に付けないといけないので
strcat 関数を使ってくっつけます。
MFCを使っているならCString を char の代わりに
使用して Mid メンバ関数を使うと簡単です。
例もなにも・・・。書いてみたら3行でしたよ。
CString data = 0x5265ABFF;
CString result1 = data.Mid(0,6);
CString result2 = 0x + data.Mid(6);
ファイルの入出力のところはじぶんでやってみてくだ
さい。では。
ファイルの入出力がうまくいきません。よろしければ教えていただけませんか??
ほんとに自分でやってるのですか?
発言開始から全くソースが出てきてませんが。。。
うまくいかないなら、何がうまくいかないのかを質問する方がいいと思います。
そして、必要ならそのコードを載せて明確に質問しないと、
いくら皆さんが博識でも答えられないと思います。
>WAVEの構造体は理解していますが、うまくプログラムを作成できなくて悩んでいます。
ファイル入出力の方が簡単に理解できると思いますが。。。
>ファイルの入出力がうまくいきません。よろしければ教えていただけませんか??
ファイルの入力に失敗しているのでしょうか?WAVEファイルへの出力に失敗している
のでしょうか?こっちもわかりません。
前者の場合、失礼ですが質問のレベルが低い割りに課題のレベルが高い感じがします。
後者ならちょっとソースコードを見せてください。どこがうまくいかないのかもどうか
もなにもわかりませんし。
>wood 2002/07/23(火) 12:21:32
の質問どうなったの?
MSDNサンプルなぜ見ない
見れば、ファイル入出力くらいすぐわかるはず
今までの内容みるとここの返信者に全て仕様固めしてもらって
いるんじゃないですか
だいたい
>スヌーピー 2002/07/30(火) 13:27:27
>よろしければ、細かくサンプルプログラムを頂けたら幸いです。
>まだ完成にはいたって降りません。
これは、どういうことですか
正規購入している方なら「MSDNサンプル」くらい簡単に見つけている
はずだけど
最初の質問原点では
>あるテキストファイルから音声ファイルを作成するプログラム
となっているのに
>スヌーピー 2002/07/31(水) 18:20:40
>RAWというファイルの中身が
となっている
RAWのどこがテキストファイルなのですか?
質問の内容がもともと大雑把過ぎる
このスレッド一度クローズして
わからない部分をソースを交えて細かく質問上げてください
ここの返信者に全てを作ってもらおうと思っているのではないかと
勘違いされても仕方ないのではないですか
一応プログラムとしてはできたのですが、エラーが・・・。
error LNK2001が出てしまっております。このエラーはプログラム上でその変数が指定さ
れていないなどのようなことなんでしょうか??
外部シンボル "int mistaken (?mistaken@@3HA) は未解決です
外部シンボル __imp__mmioAscend@12 は未解決です
外部シンボル __imp__mmioWrite@12 は未解決です
外部シンボル __imp__mmioCreateChunk@12 は未解決です
外部シンボル __imp__mmioSeek@12 は未解決です
外部シンボル __imp__mmioOpenA@12 は未解決です
外部シンボル "class CString FilenameS(?FilenameS@@3VCString@@A) は未解決です
外部シンボル "class CString FilenameN (?FilenameN@@3VCString@@A) は未解決です
外部シンボル "unsigned short wBitsPerSample (?wBitsPerSample@@3GA) は未解決です
外部シンボル "unsigned short nChannels (?nChannels@@3GA) は未解決です
外部シンボル "unsigned long nSamplesPerSec (?nSamplesPerSec@@3KA) は未解決です
外部シンボル __imp__mmioClose@8 は未解決です
外部シンボル __imp__mmioFlush@8 は未解決です
これだけのエラーが出てしまいました。
このエラーをどのようにすればいいのか教えてください。MSDNライブラリーを見て
も・・・