// Otwiera plik, ustala dla jego format oraz kodek, jaki bêdzie u¿yty // Zwraca -1 jesli blad static int openAudioFile(const char *cfilename) { GOC_BDEBUG("-> openAudioFile: %s", cfilename); // wstepne inicjowanie i sprzatanie closeAudioFile(); // czy wskazano jaki¶ plik if ( cfilename == NULL ) return -1; // czy plik istnieje if ( ! goc_isFileExists( cfilename ) ) return -1; if ( goc_isFolder( cfilename ) ) return -1; // ustawienie nowego pliku odtwarzanego filename = cfilename; // otworz plik GOC_CHEOP(decoderOpen( filename, N_SAMPLES * N_CHANNELS ) == DECODER_CODE_OK, filename = NULL; return -1); GOC_BDEBUG("<- openAudioFile: %s", cfilename); eventChangeSongPlaying(); if ( playerOpenOutput() == PLAYER_CODE_OK ) { return 0; } else { return -1; } }
AudioLoader::~AudioLoader() { closeAudioFile(); av_freep(&_buffer); av_freep(&_md5Encoded); av_freep(&_decodedFrame); }
// zwraca 1, gdy ok, 0 gdy koniec int playOneFrame() { size_t size; if (decoderRead(playBuf, &size) != DECODER_CODE_OK) { GOC_ERROR("Bad decoder read"); closeAudioFile(); return 0; } if ( size == 0 ) { closeAudioFile(); return 0; } if (playerPlay(playBuf, size) != PLAYER_CODE_OK) { GOC_ERROR("Error play"); closeAudioFile(); return 0; } return 1; }
void ofApp::endRenderMode(){ cout<<"realtime mode"<<endl; setResolution(realtime_width, realtime_height); vwt->setAudioDelay(audio_delay); closeAudioFile(); }
void AudioLoader::reset() { Algorithm::reset(); if (!parameter("filename").isConfigured()) return; string filename = parameter("filename").toString(); closeAudioFile(); openAudioFile(filename); pushChannelsSampleRateInfo(_audioCtx->channels, _audioCtx->sample_rate); }
AlgorithmStatus AudioLoader::process() { if (!parameter("filename").isConfigured()) { throw EssentiaException("AudioLoader: Trying to call process() on an AudioLoader algo which hasn't been correctly configured."); } // read frames until we get a good one do { int result = av_read_frame(_demuxCtx, &_packet); //E_DEBUG(EAlgorithm, "AudioLoader: called av_read_frame(), got result = " << result); if (result != 0) { // 0 = OK, < 0 = error or EOF if (result != AVERROR_EOF) { char errstring[1204]; av_strerror(result, errstring, sizeof(errstring)); ostringstream msg; msg << "AudioLoader: Error reading frame: " << errstring; E_WARNING(msg.str()); } // TODO: should try reading again on EAGAIN error? // https://github.com/FFmpeg/FFmpeg/blob/master/ffmpeg.c shouldStop(true); flushPacket(); closeAudioFile(); if (_computeMD5) { av_md5_final(_md5Encoded, _checksum); _md5.push(uint8_t_to_hex(_checksum, 16)); } else { string md5 = ""; _md5.push(md5); } return FINISHED; } } while (_packet.stream_index != _streamIdx); // compute md5 first if (_computeMD5) { av_md5_update(_md5Encoded, _packet.data, _packet.size); } // decode frames in packet while(_packet.size > 0) { if (!decodePacket()) break; copyFFmpegOutput(); } // neds to be freed !! av_free_packet(&_packet); return OK; }
AudioLoader::~AudioLoader() { closeAudioFile(); av_freep(&_buffer); #if LIBAVCODEC_VERSION_INT >= AVCODEC_AUDIO_DECODE4 av_freep(&_decodedFrame); #endif #if !HAVE_SWRESAMPLE av_freep(&_buff1); av_freep(&_buff2); if (_audioConvert) { av_audio_convert_free(_audioConvert); _audioConvert = NULL; } #endif }
AlgorithmStatus AudioLoader::process() { if (!parameter("filename").isConfigured()) { throw EssentiaException("AudioLoader: Trying to call process() on an AudioLoader algo which hasn't been correctly configured."); } // read frames until we get a good one do { int result = av_read_frame(_demuxCtx, &_packet); //E_DEBUG(EAlgorithm, "AudioLoader: called av_read_frame(), got result = " << result); if (result != 0) { shouldStop(true); flushPacket(); closeAudioFile(); return FINISHED; } } while (_packet.stream_index != _streamIdx); decodePacket(); copyFFmpegOutput(); return OK; }
/* LoadBuffer loads the named audio file into an OpenAL buffer object, and * returns the new buffer ID. */ static ALuint LoadSound(const char *filename) { ALenum err, format, type, channels; ALuint rate, buffer; size_t datalen; void *data; FilePtr sound; /* Open the audio file */ sound = openAudioFile(filename, 1000); if(!sound) { fprintf(stderr, "Could not open audio in %s\n", filename); closeAudioFile(sound); return 0; } /* Get the sound format, and figure out the OpenAL format */ if(getAudioInfo(sound, &rate, &channels, &type) != 0) { fprintf(stderr, "Error getting audio info for %s\n", filename); closeAudioFile(sound); return 0; } format = GetFormat(channels, type, NULL); if(format == AL_NONE) { fprintf(stderr, "Unsupported format (%s, %s) for %s\n", ChannelsName(channels), TypeName(type), filename); closeAudioFile(sound); return 0; } /* Decode the whole audio stream to a buffer. */ data = decodeAudioStream(sound, &datalen); if(!data) { fprintf(stderr, "Failed to read audio from %s\n", filename); closeAudioFile(sound); return 0; } /* Buffer the audio data into a new buffer object, then free the data and * close the file. */ buffer = 0; alGenBuffers(1, &buffer); alBufferData(buffer, format, data, datalen, rate); free(data); closeAudioFile(sound); /* Check if an error occured, and clean up if so. */ err = alGetError(); if(err != AL_NO_ERROR) { fprintf(stderr, "OpenAL Error: %s\n", alGetString(err)); if(buffer && alIsBuffer(buffer)) alDeleteBuffers(1, &buffer); return 0; } return buffer; }