教えてください – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

教えてください

固定ページ 2 / 4

スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

もう少し詳しくデータについて書き込みます。
0x25555464というデータを一つの値として読み込みを行うにはどのようにしたらいいの
でしょうか??
RAWという拡張子やDATという拡張子の中に沢山のデータが入っているものとして考えて
います。
皆さんに細かく教えていただき幸いに思っています。まだ、完成には程遠いのですがよ
ろしくお願いします


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

入力元データのフォーマットどうなっているんですか
RAWとDATではフォーマット(データの並び)違うと思いますけど
拡張子に関係なく変換したいのでは無いのですか
またそれがどういう意味を持っているのか分かりませんけど?
また、最初は十進だったけど、今度は16進ですか
取り合えづバイナリなりテキストなりで読み込んで
バイトを区切って変換すればよいのではないですか

仕様の確立してから分からない部分を明確にして再質問してはどうですか
皆さんおおざっぱ過ぎてどう解答して良いかわかんないと思います


返信引用
Joan
 Joan
(@Joan)
ゲスト
結合: 23年前
投稿: 42
 

char* をint へ変換する関数がCランタイムの中にあります。
atof、atoi、_atoi64、atol
これらを使えば、十分読み込めます。
どうしても、わからなければ入門書を参考にしてください。


返信引用
スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

その一つのデータ0x25555464を0x2555というデータと0x5464というデータに分けるには
どのようにしたらいいのでしょうか??

WAVEの構造体は理解していますが、うまくプログラムを作成できなくて悩んでいます。
参考程度に教えてください


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

単純にcharで読むのはだめなんですか
共用体使ってみてはどうですか


返信引用
a
 a
(@a)
ゲスト
結合: 23年前
投稿: 59
 

もう少し基本を勉強してみてはどうでしょう?
後々必ず役立つと思いますが。。。


返信引用
Joan
 Joan
(@Joan)
ゲスト
結合: 23年前
投稿: 42
 

>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 の入出力関数、クラスのサンプル
ぐらい出てきそうですが・・・。


返信引用
スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

よろしければ、細かくサンプルプログラムを頂けたら幸いです。

まだ完成にはいたって降りません。

まだ沢山聞くことがあると思いますがよろしくお願いします


返信引用
スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

RAWというファイルの中身が
0x5265ABFF 0x12348789 0x54878888 ・・・・・・・・・・・・・・・
になっています。
これを一つのデータを読込むにはどのようにしたらいいのでしょうか??

あと、例えばこの数値(0x5265ABFF)を 0x5265 と 0xABFFに分けるにはどのようにし
たらいいのでしょうか??

参考程度にプログラム例も教えていただけたら嬉しいです。


返信引用
Joan
 Joan
(@Joan)
ゲスト
結合: 23年前
投稿: 42
 

うーん、簡単な文字列操作だと思いますが。
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);

ファイルの入出力のところはじぶんでやってみてくだ
さい。では。


返信引用
スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

ファイルの入出力がうまくいきません。よろしければ教えていただけませんか??


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 24年前
投稿: 180
 

ほんとに自分でやってるのですか?
発言開始から全くソースが出てきてませんが。。。
うまくいかないなら、何がうまくいかないのかを質問する方がいいと思います。
そして、必要ならそのコードを載せて明確に質問しないと、
いくら皆さんが博識でも答えられないと思います。

>WAVEの構造体は理解していますが、うまくプログラムを作成できなくて悩んでいます。
ファイル入出力の方が簡単に理解できると思いますが。。。


返信引用
Joan
 Joan
(@Joan)
ゲスト
結合: 23年前
投稿: 42
 

>ファイルの入出力がうまくいきません。よろしければ教えていただけませんか??

ファイルの入力に失敗しているのでしょうか?WAVEファイルへの出力に失敗している
のでしょうか?こっちもわかりません。
前者の場合、失礼ですが質問のレベルが低い割りに課題のレベルが高い感じがします。
後者ならちょっとソースコードを見せてください。どこがうまくいかないのかもどうか
もなにもわかりませんし。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

>wood 2002/07/23(火) 12:21:32
の質問どうなったの?
MSDNサンプルなぜ見ない
見れば、ファイル入出力くらいすぐわかるはず

今までの内容みるとここの返信者に全て仕様固めしてもらって
いるんじゃないですか

だいたい
>スヌーピー 2002/07/30(火) 13:27:27
>よろしければ、細かくサンプルプログラムを頂けたら幸いです。
>まだ完成にはいたって降りません。
これは、どういうことですか
正規購入している方なら「MSDNサンプル」くらい簡単に見つけている
はずだけど

最初の質問原点では
>あるテキストファイルから音声ファイルを作成するプログラム
となっているのに

>スヌーピー 2002/07/31(水) 18:20:40
>RAWというファイルの中身が
となっている
RAWのどこがテキストファイルなのですか?
質問の内容がもともと大雑把過ぎる
このスレッド一度クローズして
わからない部分をソースを交えて細かく質問上げてください

ここの返信者に全てを作ってもらおうと思っているのではないかと
勘違いされても仕方ないのではないですか


返信引用
スヌーピー
 スヌーピー
(@スヌーピー)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

一応プログラムとしてはできたのですが、エラーが・・・。
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ライブラリーを見て
も・・・


返信引用
固定ページ 2 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました