/** * Prepare recording. Initialize and acquire recording resources. */ static javacall_result init_recording(recorder_handle* hRecord) { WAVEFORMATEX format; /* Setup wave in format */ format.wFormatTag = WAVE_FORMAT_PCM; format.cbSize = 0; format.wBitsPerSample = 16; format.nSamplesPerSec = 22050; format.nChannels = 1; format.nAvgBytesPerSec = format.nSamplesPerSec * (format.wBitsPerSample/8); format.nBlockAlign = format.nChannels; /* Open WAV in H/W */ if (NULL == hRecord->hWAVEIN) { MMRESULT mmReturn = 0; mmReturn = waveInOpen(&hRecord->hWAVEIN, WAVE_MAPPER, &format, (DWORD)waveInProc, (DWORD)hRecord, CALLBACK_FUNCTION); if (MMSYSERR_NOERROR != mmReturn) { hRecord->hWAVEIN = NULL; return JAVACALL_FAIL; } } /* Create WAV file for (temp) storage */ if (NULL == hRecord->hFile) { HMMIO hFile; /* Create temp file? If there is no pre-setted name. */ if (0x0 == hRecord->fileName[0]) { GetTempPath(MAX_PATH, hRecord->fileName); GetTempFileName(hRecord->fileName, "record", 0, hRecord->fileName); } if (JAVACALL_SUCCEEDED(create_wav_file(hRecord->fileName, &format, &hFile))) { hRecord->hFile = hFile; } else { waveInClose(hRecord->hWAVEIN); hRecord->hWAVEIN = NULL; return JAVACALL_FAIL; } } /* Add input buffer */ if (!JAVACALL_SUCCEEDED(add_input_buffer(hRecord, &format))) { waveInClose(hRecord->hWAVEIN); close_wav_file(hRecord); hRecord->hWAVEIN = NULL; return JAVACALL_FAIL; } return JAVACALL_OK; }
std::shared_ptr<cainteoir::audio> cainteoir::create_audio_file( const char *filename, const char *type, float quality, const rdf::graph &aDocMetadata, const rdf::uri &aDocument, const rdf::uri &aFormat, int aChannels, int aFrequency) { if (filename && !strcmp(filename, "-")) filename = nullptr; if (!strcmp(type, "wav")) return create_wav_file(filename, aFormat, aChannels, aFrequency, quality, aDocMetadata, aDocument); if (!strcmp(type, "ogg")) return create_ogg_file(filename, aFormat, aChannels, aFrequency, quality, aDocMetadata, aDocument); return std::shared_ptr<cainteoir::audio>(); }