全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3774
推到 Plurk!
推到 Facebook!

讀取聲音檔案(WAV)的16進制轉 int問題

答題得分者是:syntax
MulderTsai
一般會員


發表:1
回覆:2
積分:0
註冊:2007-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-06 17:42:09 IP:219.84.xxx.xxx 訂閱
請問各位板上高手:

小弟現在想讀取一個聲音檔案(WAV)檔
擷取一段裡面的資料為04 F7 E4 F8 (4個byte)
小弟是用UltraEdit去看的...(切換成16進制模式)(這裡看到的是ASCII code嗎?)
現在我用char[4]把上面的值抓進來
接著我把前後對調成為 F7 04 F8 E4

下一步驟是想把字串轉字元
以兩個byte為單位抓在一起
成為 int a[2]=[0xF704 0xF8E4]
小弟試過strtol...
範例程式是直接用char[4]="F704"去轉成0xF704
比較之下我會少兩個byte

請教各位前輩轉換的方法...
感謝

syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-10 02:00:44 IP:61.64.xxx.xxx 訂閱
字串轉字元 ???  壓縮嗎?

你的思路問題在這裡
另外 Wav 檔分成兩種 1 Byte 的與 2 Byte 的,你要先確定是 2 Byte 的,那前後互換才有意義
最後,你不需要脫褲放屁

直接使用 Word 做為讀取格式,讀進 2 byte 的資料,自然會幫你轉換好
然後 StrToInt 就會將數值轉成字串
如果是 1 byte 的 wav 才用 char 去讀

2 byte 用 char 一個一個做,太累了吧
MulderTsai
一般會員


發表:1
回覆:2
積分:0
註冊:2007-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-10 14:15:24 IP:140.115.xxx.xxx 訂閱
感謝前輩回答小弟的問題
我字串要轉字元的意義是為了要做四則運算(例:把0xF704換成-0.0701904296875)
我的WAV是16bit, 2 Byte的
我真的是脫褲子放屁了...
我用short取代char, 程式就會直接讀2 Byte並自動轉換好
小弟不是用strtoint
我是直接把short & 0xFFFF
把字串轉數字
感謝前輩提點

===================引 用 文 章===================
字串轉字元 ???? 壓縮嗎?

你的思路問題在這裡
另外 Wav 檔分成兩種 1 Byte? 的與? 2 Byte 的,你要先確定是 2 Byte 的,那前後互換才有意義
最後,你不需要脫褲放屁

直接使用 Word 做為讀取格式,讀進 2 byte 的資料,自然會幫你轉換好
然後 StrToInt 就會將數值轉成字串
如果是 1 byte 的 wav 才用 char 去讀

2 byte 用 char 一個一個做,太累了吧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-10 15:22:47 IP:61.64.xxx.xxx 訂閱
我用short取代char, 程式就會直接讀2 Byte並自動轉換好
小弟不是用strtoint
我是直接把short & 0xFFFF
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
??
這樣讀出來就是數值,不需要 & 0xFFFF
& 0xFFFF 後還是原來的東西,應該不需要做這步驟
文字串轉數字的意義,是指 "AF 67" 轉成 44903
你用 UltraEdit 會看到 67 AF 是因為它幫你將數字轉成文字
你讀檔時並沒有誰幫你轉成文字吧,這樣一讀出來就是數值,不需要轉換
除非你用特殊的方法來處理 wav,不然,讀出來就可以使用,不需要多個預先處理的程序
MulderTsai
一般會員


發表:1
回覆:2
積分:0
註冊:2007-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-10 15:43:01 IP:140.115.xxx.xxx 訂閱
我剛剛照前輩的方式下去做了
會有一個問題發生
如果不做&0xFFFF的動作
在做printf的動作時
會出現 FFFFF704這個現象
所以做&0xFFFF對我而言是有這樣的目的的


===================引 用 文 章===================
我用short取代char, 程式就會直接讀2 Byte並自動轉換好
小弟不是用strtoint
我是直接把short & 0xFFFF
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
??
這樣讀出來就是數值,不需要 & 0xFFFF
& 0xFFFF 後還是原來的東西,應該不需要做這步驟
文字串轉數字的意義,是指 "AF 67" 轉成 44903
你用 UltraEdit 會看到 67 AF 是因為它幫你將數字轉成文字
你讀檔時並沒有誰幫你轉成文字吧,這樣一讀出來就是數值,不需要轉換
除非你用特殊的方法來處理 wav,不然,讀出來就可以使用,不需要多個預先處理的程序
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-10 18:49:43 IP:220.131.xxx.xxx 訂閱
這是你用了 signed 跟 unsigned 的差別。
要印的變數加上個修飾詞就好了。
===================引 用 文 章===================
在做printf的動作時
會出現 FFFFF704這個現象
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-14 03:28:38 IP:61.64.xxx.xxx 訂閱
Wav 檔,所存的值是 有正負的
所以你在處理時也應該有正負之分吧
除非,恩,你的是特殊處理
不然一個是上緣 peak 另一個是下緣 peak
如果你只是要學 UltiEdit 印出來
哪請用 Byte 不要用 SmallInt
然後印出前後沒有對調的結果
不然,使用的人會在對調一次,對調對調的結果,會變成沒有對調
而如果你是要做運算,請使用 SmallInt ,並注意正負之分
Wav 是波形檔 32767 ~ 0 ~ -32768
強制轉成無號整數計算,我不知道會變成什麼
系統時間:2024-05-03 20:38:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!