如何从 .WAV 文件中读取数字?
我尝试使用 .read 不起作用。 - 将二进制数据读入 std::string c++
这是我的尝试:
if (audioFile.is_open()){ //checking whether the file is open
int frequency = 0;
int crest = 0;
string tp;
int number_of_crests;
for (int i = 0; i < sampleRate * duration; i++) {
audioFile.read(tp.data(), 0);
cout << "TP:" << tp << "\n";
if (std::stoi(tp.data()) >= crest) {
crest = std::stoi(tp.data());
number_of_crests++;
}
// gets sine wave frequency (ever time a crest is reached)
// f = 1/p
// p = 2pi / b
}
frequency = number_of_crests / duration;
frequencies.push_back(frequency);
cout << frequency;
}
这是用于编写 .WAV 文件的代码 - 我遵循了本教程:https://www.youtube.com/watch?v=qqjvB_VxMRM&ab_channel=AkashMurthy
ofstream audioFile;
cout << "A";
audioFile.open("Waveform.txt", ios::binary); // opens a file named Waveform, if it doesn't exist it makes one
//audioFile.open("Waveform.wav", ofstream::binary);
// header chunk
audioFile << "RIFF";
audioFile << "----"; // stores size of file in bytes
audioFile << "WAVE";
// format chunk
audioFile << "fmt ";
writeToFile(audioFile, 16, 4); // size
writeToFile(audioFile, 1, 2); // compression code
writeToFile(audioFile, 1, 2); // num of channels, stereo or mono type stuff
writeToFile(audioFile, sampleRate, 4); // sampleRate
writeToFile(audioFile, sampleRate * bitDepth / 8, 4); // Average bytes per second (sampleRate * (bitDepth * Channels) / 8)
writeToFile(audioFile, bitDepth / 8, 2); // Block align
writeToFile(audioFile, bitDepth, 2);
// Data chunk
audioFile << "data";
audioFile << "----"; // stores size of file in bytes
auto maxAmplitude = pow(2, bitDepth - 1) - 1;
int preAudioPos = audioFile.tellp();
for (int i = 0; i < encrypted.size(); i++) {
SineOscillator sineOscillator(val * 2 + 300, 0.5); // note that encrypted[i] is doubled
for (int i = 0; i < sampleRate * duration; i ++) {
auto sample = sineOscillator.process();
int intSample = static_cast<int> (sample * maxAmplitude);
writeToFile(audioFile, intSample, 2);
}
}
以下是 .WAV 文件的文本编号: RIFF30149515fmt 16114400088000216data30149515420253028402049955952688677948671951610323110911181712497131291371114240147141513 215492157921603216210163261637916370162971616215965157061538715009145741408213537129391229211598108591007892598404751766015 6594696371527191714701-313-1327-2336-3336-4323-5293-6243-7169-8068-8936-9769-10565-11320-12032-12697-13314-13880-14392-1485 0-15250-15591-15873-16094-16253 -16349-16383-16354-16262-16108-15891-15614-15277-14881-14428-13920-13358-12745-12083-11374-10622-9829-8998-8133-7237-6312- 5364-4395-3409-2410 -1402-38862616392646364246245589653274508339919710019108021154512242128931349414044145391497915361156851594816149162891636 6163811633216221160471581215516151611474714277137521317412545118691114610381957687357859695460225067409231022099108974-940- 1951-2955-3947-4924-5883-6818-7728-8608-9455-10265-11036-11765-12449-13084-13670-14203-14681-15104-15468-15772-16017-16199 -16320-16377-16372-16304-16174-15981-15727-15413-15039-14608-14120-13579-12985-12341-11650-10914-10137-9320-8468-7583-6669 -5729-4767-3787-2793 -1788-77623912532262326342515223617471028003887397091050811266119811265013
这是 .WAV 文件的文本: RIFF
v· WAVEfmt à« ÀW data
v·öéÔ
´ο@ærß!,%S(S+).Ñ0I35 7z9;„<°= >R?Æ?û?ò?©?"?]>Z=<¡:î87á4‹20N-k*^'+$Ô ]ÉXƒŸ
²½ÇþÑúàöøòïSëçÿã|àÝ×Ù»ÖÈÓ ÑgÎþËÈÉÈÇþÅnÄÃÿÁ"ÁƒÀ#ÀÀÀzÀÁíÁÃSÄßÅ¤Ç ÉÒË7ÎÍÐ’Ó‚Ö›ÙÚÜ;à»ãXçëÕî¯ò–ö†ú|þrgV
:Õ„“ í##'2-Ò/]2¶4Ü6Ë8ƒ:ÞÛç×äÔ Ò_ÏäÌšÊ…È§Æ Å”ÃdÂoÁ¹À@À ÀÀPÀÒÀ“Á‘ÂËÃAÅðÆØÈõÊGÍËÏ~Ò^ÕgؘÛìÞaâóåŸéaí5ñõùøüï åÖ¿›g¾C©"í%),Í.j1×368â9v;Ð<î=Ð>s?Ø?ÿ?æ??ù>%>=È;@:8‡6Y4÷1e/£,¶) &d# ‡í:r™ ³ ÃÎØýãùôõò7îqêÀæ(ã¬ßQÜÙÖÓ_ÐÑÍtËJÉWÇ›ÅÄÑÂÅÁ÷ÀgÀÀÀ.À™ÀBÁ)ÂLëÄEÆÈ Ê^ÌÏÎqÑ@Ô:×\Ú£Ýá“ä5èïë½ïšó„÷uûlÿbU B #ö¶_ïa!²$à'æ*Â-p0ð2=5V789ã:S<ˆ=><?¹?÷?÷?·?9?}>„=N<Ü:19N745æ2f0¶-Ù*Ó'¥$S!àP¦æ2 E Q[ÿeûs÷Šó¬ïßë&è„äýà•ÝNÚ-×4ÔeÑÅÎUÌÊÈ>Æ¥ÄGÃ$Â?Á—À-ÀÀÀiÀúÀÉÁÖÂÄ¢Å^ÇSÉ}ËÛÍjÐ(ÓÖ%Ù^Ü»ß7ãÏæêGîòöóùèýßÔÄ ª ‚Jü– r#&Ã)¯,p/2b46‡8G:Í;=)>ü>‘?ç?þ?×?q?Ì>ê=Ë<p;Û9 8 6Í3
1Â.ö+ÿ(à%›"5¯W´®ÆÔÞ èüôø õ$ñQíéäåSâÞÞŠÛZØQÕrÒÀÏ=ÍìÊÏÈéÆ:ÅÆ ÒÁÏÀNÀ
À ÀBÀ»ÀsÁhšà Å®ÆÈ£ÊîÌjÏÒðÔô×ÛnÞßámåéÔì¥ð†ôrøeü[ QD.