From f50dd86e755b6cb0e6f2591530fdd11cf3e231b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maksymilian=20Wilczy=C5=84ski?= Date: Mon, 12 May 2025 23:54:13 +0200 Subject: [PATCH] allow to play OR synth to file --- Rota_(Nie_rzucim_ziemi)_POL_04401.mid | Bin 0 -> 39546 bytes main.cpp | 100 +++++++++++++++----------- 2 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 Rota_(Nie_rzucim_ziemi)_POL_04401.mid diff --git a/Rota_(Nie_rzucim_ziemi)_POL_04401.mid b/Rota_(Nie_rzucim_ziemi)_POL_04401.mid new file mode 100644 index 0000000000000000000000000000000000000000..8f729703d862662a8947c970d1259fde49cbd1ad GIT binary patch literal 39546 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 Jj>y;5{{{Yj^~C@H literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index a274ba1..d169a1d 100644 --- a/main.cpp +++ b/main.cpp @@ -38,10 +38,11 @@ void WriteWAVHeader(std::ofstream &file, DWORD length) { int main(int argc, char** argv) { std::cout << "Program start\n"; - if (argc != 3) { + if (argc != 4) { std::cerr << "Wrong arguments!\n"; return -1; } + bool synthToFile = std::strcmp(argv[3], "true") == 0; // 1) Initialize BASS: default device, 44100 Hz, no flags if (!BASS_Init(-1, 44100, 0, NULL, NULL)) { @@ -57,9 +58,12 @@ int main(int argc, char** argv) { return 1; } - // Create decoding stream (no playback) - HSTREAM midiStream = BASS_MIDI_StreamCreateFile(FALSE, argv[2], 0, 0, - BASS_STREAM_DECODE | BASS_SAMPLE_FLOAT | BASS_MIDI_NOFX, 44100); + // Create decoding stream + DWORD flags = BASS_SAMPLE_FLOAT | BASS_MIDI_NOFX; + if (synthToFile) + flags |= BASS_STREAM_DECODE; + + HSTREAM midiStream = BASS_MIDI_StreamCreateFile(FALSE, argv[2], 0, 0, flags, 44100); if (!midiStream) { std::cerr << "BASS_MIDI_StreamCreateFile error: " << BASS_ErrorGetCode() << std::endl; BASS_MIDI_FontFree(sfont); @@ -77,50 +81,60 @@ int main(int argc, char** argv) { return 1; } - std::ofstream wav("output.wav", std::ios::binary); - if (!wav) { - std::cerr << "Can't open output.wav for writing" << std::endl; - return 1; - } - - WriteWAVHeader(wav, 0); - - DWORD totalBytes = 0; - const int bufferSize = 44100 * 2 * sizeof(float); // 1 second float stereo - float buffer[44100 * 2]; - - std::cout << "Synthesis start\n"; - - QWORD totalRead = 0; - QWORD totalStreamLength = BASS_ChannelGetLength(midiStream, BASS_POS_BYTE); - auto lastUpdate = std::chrono::steady_clock::now(); - - while (true) { - int bytes = BASS_ChannelGetData(midiStream, buffer, bufferSize); - if (bytes <= 0) break; - - short pcm[44100 * 2]; - for (int i = 0; i < bytes / 4; ++i) { - float sample = buffer[i] * 32767.0f; - if (sample > 32767.0f) sample = 32767.0f; - if (sample < -32768.0f) sample = -32768.0f; - pcm[i] = static_cast(sample); + if (!synthToFile) { + std::cout << "Playing live...\n"; + if (!BASS_ChannelPlay(midiStream, FALSE)) { + std::cerr << "BASS_ChannelPlay error: " << BASS_ErrorGetCode() << std::endl; + BASS_StreamFree(midiStream); + BASS_MIDI_FontFree(sfont); + BASS_Free(); + return 1; } - wav.write(reinterpret_cast(pcm), bytes / 2); - totalRead += bytes; + std::cout << "Press Enter to stop...\n"; + std::cin.get(); // wait for user input + } else { + std::ofstream wav("output.wav", std::ios::binary); + if (!wav) { + std::cerr << "Can't open output.wav for writing" << std::endl; + return 1; + } - float percent = (totalStreamLength > 0) ? (100.0f * totalRead / totalStreamLength) : 0.0f; - printf("\rProgress: %.2f%%", percent); + WriteWAVHeader(wav, 0); + DWORD totalBytes = 0; + const int bufferSize = 44100 * 2 * sizeof(float); + float buffer[44100 * 2]; + QWORD totalRead = 0; + QWORD totalStreamLength = BASS_ChannelGetLength(midiStream, BASS_POS_BYTE); + + std::cout << "Synthesis start\n"; + while (true) { + int bytes = BASS_ChannelGetData(midiStream, buffer, bufferSize); + if (bytes <= 0) break; + + short pcm[44100 * 2]; + for (int i = 0; i < bytes / 4; ++i) { + float sample = buffer[i] * 32767.0f; + if (sample > 32767.0f) sample = 32767.0f; + if (sample < -32768.0f) sample = -32768.0f; + pcm[i] = static_cast(sample); + } + + wav.write(reinterpret_cast(pcm), bytes / 2); + totalBytes += bytes / 2; + totalRead += bytes; + + float percent = (totalStreamLength > 0) ? (100.0f * totalRead / totalStreamLength) : 0.0f; + printf("\rProgress: %.2f%%", percent); + } + + wav.seekp(0); + WriteWAVHeader(wav, totalBytes); + wav.close(); + std::cout << "\nSynthesis end\n"; + std::cout << "Exported to output.wav" << std::endl; } - wav.seekp(0); - WriteWAVHeader(wav, totalBytes); - wav.close(); - - std::cout << "\nSynthesis end\n"; - std::cout << "Exported to output.wav" << std::endl; - // 6) Clean up BASS_StreamFree(midiStream); // free stream BASS_MIDI_FontFree(sfont); // unload soundfont