如何读取.WAV文件

问题描述 投票:0回答:0

如何从 .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ƒ:?¡?î?ý? Ì?]?¯>ä=œ<9;›9Å7¸5v31].Š+(h%"³†Ëü3AJ Tüaøuô•ðäìé^åÐá
ÞÛç×äÔ Ò_ÏäÌšÊ…È§Æ Å”Ã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.

c++ c wav
© www.soinside.com 2019 - 2024. All rights reserved.