本文整理汇总了C++中WaveFile类的典型用法代码示例。如果您正苦于以下问题:C++ WaveFile类的具体用法?C++ WaveFile怎么用?C++ WaveFile使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WaveFile类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OpenWaveDevice
int GMSynthDLL::ThreadProc()
{
if (live)
{
if (seqMode & seqPlay)
ldTm = 0.02;
else
ldTm = 0.20;
OpenWaveDevice();
inmgr.SetWaveOut(&wvd);
}
else
{
if (wvf.OpenWaveFile(outFileName, 2))
{
OnEvent(SEQEVT_SEQSTOP, NULL);
return GMSYNTH_ERR_FILEOPEN;
}
inmgr.SetWaveOut(&wvf);
}
inmgr.Reset();
seq.SequenceMulti(inmgr, stTime, endTime, seqMode);
if (live)
{
bsInt32 drain = (bsInt32) (synthParams.sampleRate * (ldTm * 4));
while (--drain > 0)
inmgr.Tick();
CloseWaveDevice();
}
else
wvf.CloseWaveFile();
return GMSYNTH_NOERROR;
}
示例2: Speak
void FaceController::Speak(WaveFile &wave) {
m_visemes.clear();
//Calculate which visemes to use from the wave file data
float soundLength = wave.GetLength();
float maxAmp = wave.GetMaxAmplitude() * 0.3f;
for (float i=0.0f; i<soundLength; i += 0.1f) {
short amp = wave.GetAverageAmplitude(i, i + 0.1f);
float p = min(amp / maxAmp, 1.0f);
if (p < 0.2f) {
m_visemes.push_back(Viseme(0, 0.0f, i));
}
else if (p < 0.4f) {
float prc = max((p - 0.2f) / 0.2f, 0.3f);
m_visemes.push_back(Viseme(3, prc, i));
}
else if (p < 0.7f) {
float prc = max((p - 0.4f) / 0.3f, 0.3f);
m_visemes.push_back(Viseme(1, prc, i));
}
else {
float prc = max((p - 0.7f) / 0.3f, 0.3f);
m_visemes.push_back(Viseme(4, prc, i));
}
}
m_visemeIndex = 1;
m_speechTime = 0.0f;
}
示例3: memset
LRESULT CMainDlg::OnSaveWave(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
char fileName[MAX_PATH];
memset(fileName, 0, sizeof(fileName));
OPENFILENAME ofn;
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFilter = "Sound Files(*.wav)\0*.wav\0All Files(*.*)\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFile = fileName;
ofn.lpstrDefExt = ".wav";
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_OVERWRITEPROMPT;
if (GetSaveFileName (&ofn))
{
double frq = GetFrequency();
GenWaveI wv;
wv.InitWT(frq, WT_USR(0));
EnvGen eg;
eg.InitEG(1.0, 2.0, 0.05, 0.05);
WaveFile wvf;
wvf.OpenWaveFile(fileName, 2);
long totalSamples = (long) (2.0 * synthParams.sampleRate);
for (long n = 0; n < totalSamples; n++)
wvf.Output1(eg.Gen() * wv.Gen());
wvf.CloseWaveFile();
}
return 0;
}
示例4: Save
bool MonoRecorder::Save(const std::string& fn, bool norm, float norm_max) {
WaveFile w;
const RecorderTrack& to_save = *(save_processed ? processed_tracks[0] : tracks[0]);
w.FromFloat(&to_save[0],to_save.getLength(),norm,norm_max);
w.Save(fn.c_str());
return true;
}
示例5: Save
bool StereoRecorder::Save(const std::string& fn, bool norm, float norm_max) {
WaveFile w;
const RecorderTrack& left = *(save_processed ? processed_tracks[0] : tracks[0]);
const RecorderTrack& right = *(save_processed ? processed_tracks[1] : tracks[1]);
w.FromFloat(&left[0],&right[0],left.getLength(),right.getLength(),norm);
w.Save(fn.c_str());
return true;
}
示例6: main
int main(void)
{
WaveFile myFile;
myFile.loadWave("DAFT.wav");
WaveFIR::LPF(myFile, 100, 100, 0, myFile.length-1);
//myFile.normalize();
myFile.saveWave("TEST.wav");
return 0;
}
示例7: EnterCriticalSection
// Destroy
BOOL AudioStream::Destroy (void)
{
BOOL fRtn = SUCCESS;
EnterCriticalSection(&write_lock);
// Stop playback
Stop ();
// Release DirectSound buffer
if (m_pdsb) {
m_pdsb->Release ();
m_pdsb = NULL;
Snd_sram -= m_cbBufSize;
}
// Delete WaveFile object
if (m_pwavefile) {
m_pwavefile->Close();
free(m_pwavefile);
m_pwavefile = NULL;
}
status = ASF_FREE;
LeaveCriticalSection(&write_lock);
return fRtn;
}
示例8: ENTER_CRITICAL_SECTION
// Destroy
BOOL AudioStream::Destroy(void)
{
BOOL fRtn = SUCCESS;
ENTER_CRITICAL_SECTION(write_lock);
// Stop playback
Stop();
// Release DirectSound buffer
if (m_pdsb)
{
m_pdsb->Release();
m_pdsb = NULL;
Snd_sram -= m_cbBufSize;
}
// Delete WaveFile object
if (m_pwavefile)
{
m_pwavefile->Close();
vm_free(m_pwavefile);
m_pwavefile = NULL;
}
status = ASF_FREE;
LEAVE_CRITICAL_SECTION(write_lock);
return fRtn;
}
示例9: CopyFrom
bool WaveFile::CopyFrom(WaveFile& other)
{
const size_t transferBufSize = 4096;
if (!writeFile) {
error = "Copy to an unopened file";
return false;
} else if (!other.readFile) {
error = "Copy from an unopened file";
return false;
}
try {
// allocate the transfer buffer
char* transferBuffer = new char[transferBufSize];
unsigned long bytesRead = 0;
try {
if (!other.ResetToStart())
throw error = "Couldn't reset input file to start";
while (bytesRead < other.dataLength) {
// calculate the size of the next buffer
size_t bytesToRead = (size_t) min(transferBufSize,
size_t(other.dataLength - bytesRead));
// read the buffer
if (fread(transferBuffer, 1, bytesToRead, other.readFile->filep())
!= bytesToRead)
throw error = "Error reading samples from input file";
bytesRead += bytesToRead;
// write the buffer
if (fwrite(transferBuffer, 1, bytesToRead, writeFile) != bytesToRead)
throw error = "Error writing samples to output file";
dataLength += bytesToRead;
changed = true;
}
// delete the transfer buffer
delete[] transferBuffer;
} catch (...) {
delete[] transferBuffer;
throw error;
}
} catch (...) {
return false;
}
return true;
}
示例10: ShowErrors
static void ShowErrors(WaveFile& from, WaveFile& to)
{
bool any = from.GetError() || to.GetError();
if (from.GetError())
cout << "Error on input: " << from.GetError() << "." << endl;
if (to.GetError())
cout << "Error on output: " << to.GetError() << "." << endl;
if (!any)
cout << "Success." << endl;
}
示例11: main
int main(int , char **)
{
WaveFile wf;
wf.SetupFormat();
if (!wf.OpenWrite("A440.wav")) {
cout << "Can't open for writing: " << wf.GetError();
return 1;
}
const dataLength = 1 /*sec*/ * wf.GetSampleRate(); // in samples
float alpha = 0;
for (int i = 0; i < dataLength; i++) {
wf.WriteSample(sin(alpha) / 2);
alpha += 2 * M_PI * frequency / wf.GetSampleRate();
}
return 0;
}
示例12: ShowFormat
static void ShowFormat(WaveFile& wave, bool details = true)
{
cout
<< "Format: " << wave.GetFormatType()
<< (wave.IsCompressed()? " (compressed)" : " (PCM)") << endl
<< "Channels: " << wave.GetNumChannels() << endl
<< "Sample rate: " << wave.GetSampleRate() << endl
<< "Bytes per second: " << wave.GetBytesPerSecond() << endl
<< "Bytes per sample: " << wave.GetBytesPerSample() << endl
<< "Bits per channel: " << wave.GetBitsPerChannel() << endl
<< "Bytes: " << wave.GetDataLength() << endl
<< "Samples: " << wave.GetNumSamples() << endl
<< "Seconds: " << wave.GetNumSeconds() << endl;
if(wave.GetFile())
cout << "File pointer: " << ftell(wave.GetFile()) << endl;
else
cout << "File pointer: null" << endl;
if (details) {
string type, value;
if (wave.GetFirstExtraItem(type, value)) {
cout << "Extra data:" << endl;
do {
cout << " " << type << ": " << value << endl;
} while (wave.GetNextExtraItem(type, value));
}
wave.ResetToStart();
}
pause();
}
示例13: Cue
// Cue
void AudioStream::Cue (void)
{
UINT num_bytes_written;
if (!m_fCued) {
m_bFade = FALSE;
m_fade_timer_id = 0;
m_finished_id = 0;
m_bPastLimit = FALSE;
m_lVolume = 0;
m_lCutoffVolume = -10000;
m_bDestroy_when_faded = FALSE;
// Reset buffer ptr
m_cbBufOffset = 0;
// Reset file ptr, etc
m_pwavefile->Cue ();
// Reset DirectSound buffer
m_pdsb->SetCurrentPosition (0);
// Fill buffer with wave data
WriteWaveData (m_cbBufSize, &num_bytes_written,0);
m_fCued = TRUE;
}
}
示例14: WriteSilence
// WriteSilence
//
// Writes silence to sound buffer. This is a helper method used by
// ServiceBuffer; it's not exposed to users of the AudioStream class.
BOOL AudioStream::WriteSilence(UINT size)
{
HRESULT hr;
LPBYTE lpbuf1 = NULL;
LPBYTE lpbuf2 = NULL;
DWORD dwsize1 = 0;
DWORD dwsize2 = 0;
DWORD dwbyteswritten1 = 0;
DWORD dwbyteswritten2 = 0;
BOOL fRtn = SUCCESS;
// Lock the sound buffer
hr = m_pdsb->Lock(m_cbBufOffset, size, (void**)(&lpbuf1), &dwsize1, (void**)(&lpbuf2), &dwsize2, 0);
if (hr == DS_OK)
{
// Get silence data for this file format. Although word sizes vary for different
// wave file formats, ::Lock will always return pointers on word boundaries.
// Because silence data for 16-bit PCM formats is 0x0000 or 0x00000000, we can
// get away with writing bytes and ignoring word size here.
BYTE bSilence = m_pwavefile->GetSilenceData();
// Write silence to sound buffer. Because the sound buffer is circular, we may have to
// do two write operations if locked portion of buffer wraps around to start of buffer.
memset(lpbuf1, bSilence, dwsize1);
dwbyteswritten1 = dwsize1;
// Second write required?
if (lpbuf2)
{
memset(lpbuf2, bSilence, dwsize2);
dwbyteswritten2 = dwsize2;
}
// Update our buffer offset and unlock sound buffer
m_cbBufOffset = (m_cbBufOffset + dwbyteswritten1 + dwbyteswritten2) % m_cbBufSize;
// m_pdsb->Unlock (lpbuf1, dwbyteswritten1, lpbuf2, dwbyteswritten2);
m_pdsb->Unlock(lpbuf1, dwsize1, lpbuf2, dwsize2);
}
else
{
// Error locking sound buffer
nprintf(("SOUND", "SOUND ==> Error, unable to lock sound buffer in AudioStr\n"));
fRtn = FAILURE;
}
return (fRtn);
}
示例15: Generate
AmpValue Generate(float duration, GenUnit *wv, EnvGen *eg, AmpValue in = 1.0)
{
long totalSamples = (long) ((duration * synthParams.sampleRate) + 0.5);
AmpValue volume;
AmpValue value;
AmpValue peak = 0.0;
eg->Reset();
for (long n = 0; n < totalSamples; n++)
{
volume = eg->Gen();
value = wv->Sample(in);
if (value > peak)
peak = value;
wvf.Output1(value * volume);
}
return peak;
}