コード例 #1
0
AudioCache* AudioEngineImpl::preload(const std::string& filePath, std::function<void(bool)> callback)
{
    AudioCache* audioCache = nullptr;
    do 
    {
        auto it = _audioCaches.find(filePath);
        if (it == _audioCaches.end()) {
            FileFormat fileFormat = FileFormat::UNKNOWN;

            std::string fileExtension = FileUtils::getInstance()->getFileExtension(filePath);

            if (fileExtension == ".wav")
            {
                fileFormat = FileFormat::WAV;
            }
            else if (fileExtension == ".ogg")
            {
                fileFormat = FileFormat::OGG;
            }
            else if (fileExtension == ".mp3")
            {
                fileFormat = FileFormat::MP3;
            }
            else
            {
                log("Unsupported media type file: %s\n", filePath.c_str());
                break;
            }

            audioCache = &_audioCaches[filePath];
            audioCache->_fileFormat = fileFormat;

            std::string fullPath = FileUtils::getInstance()->fullPathForFilename(filePath);
            audioCache->_fileFullPath = fullPath;
            AudioEngine::addTask(std::bind(&AudioCache::readDataTask, audioCache));
        }
        else 
        {
            audioCache = &it->second;
        }
    } while (false);

    if (callback)
    {
        if (audioCache)
        {
            audioCache->addLoadCallback(callback);
        } 
        else
        {
            callback(false);
        }
    }

    return audioCache;
}
コード例 #2
0
AudioCache* AudioEngineImpl::preload(const std::string& filePath, std::function<void(bool)> callback)
{
    AudioCache* audioCache = nullptr;

    do 
    {
        auto it = _audioCaches.find(filePath);
        if (it != _audioCaches.end())
        {
            audioCache = &it->second;
            if (callback && audioCache->_alBufferReady)
            {
                callback(true);
            }
            break;
        }

        AudioCache::FileFormat fileFormat = AudioCache::FileFormat::UNKNOWN;

        std::string fileExtension = FileUtils::getInstance()->getFileExtension(filePath);
        if (fileExtension == ".ogg")
        {
            fileFormat = AudioCache::FileFormat::OGG;
        }
        else if (fileExtension == ".mp3")
        {
            fileFormat = AudioCache::FileFormat::MP3;

            if (MPG123_LAZYINIT)
            {
                auto error = mpg123_init();
                if (error == MPG123_OK)
                {
                    MPG123_LAZYINIT = false;
                }
                else
                {
                    log("Basic setup goes wrong: %s", mpg123_plain_strerror(error));
                    break;
                }
            }
        }
        else
        {
            log("Unsupported media type file: %s\n", filePath.c_str());
            break;
        }

        audioCache = &_audioCaches[filePath];
        audioCache->_fileFormat = fileFormat;

        audioCache->_fileFullPath = FileUtils::getInstance()->fullPathForFilename(filePath);
        AudioEngine::addTask(std::bind(&AudioCache::readDataTask, audioCache));
    } while (false);

    if (callback)
    {
        if (audioCache)
        {
            audioCache->addLoadCallback(callback);
        } 
        else
        {
            callback(false);
        }
    }

    return audioCache;
}