如何在Corona SDK中播放Web URL音频文件?

我试图从网络链接播放音频文件,但现在似乎不起作用。这些是我尝试的代码:

local birdSound =  audio.loadSound("www.sound.com/birds.mp3")
audio.play(birdSound)

它会报错。

点赞
用户618405
用户618405

无法使用 loadSound API 将远程音频文件加载到内存中,因为此函数仅用于加载本地文件。

默认情况下,在项目文件夹(system.ResourceDirectory)中搜索文件,但是通过更改 baseDir 参数,您也可以查找其他本地文件夹中的文件。

因此,要播放您的远程音频文件,您应该首先通过 network.download API 将其下载到 system.DocumentsDirectory。当下载完成后,您可以使用 loadSound 加载它,指定正确的 baseDir。

有关 network.download API 的详细信息,请查看 此处

2012-10-12 18:39:24
用户4111272
用户4111272

使用下面的狙击手下载您的远程文件,并将其保存到 basedir 基本目录下的 localFilename

local xmnetwork = {
    last_error = nil,
    downloadHandlerInProgress = nil,
    downloadHandlerFinished = nil,
    downloadBeginHandler = nil,
    network = require("network")
}

function xmnetwork.download(url, errorHandler,beganHandler, inProgressHandler, endedHandler, localFilename, basedir)
    if( xmnetwork.network == nil) then
        xmnetwork.network = require("network")
    end

    xmnetwork.downloadHandlerInProgress = inProgressHandler
    xmnetwork.downloadHandlerFinished = endedHandler
    xmnetwork.downloadBeginHandler = beganHandler
    xmnetwork.errorHandler = errorHandler
    local function downloadListener( event )
        print("download event:" .. tostring(event))
        if ( event.isError ) then
            print( "网络错误!" )
            if( xmnetwork.errorHandler) then
                xmnetwork.errorHandler(event)
            end
        elseif ( event.phase == "began" ) then
            if ( event.bytesEstimated <= 0 ) then
                print( "开始下载,未知大小" )
            else
                print( "开始下载,估计大小(以 MB 为单位):" .. ( event.bytesEstimated /1024/1024))
            end
            if( xmnetwork.downloadBeginHandler) then
                xmnetwork.downloadBeginHandler(event)
            end
        elseif ( event.phase == "progress" ) then
            if(xmnetwork.downloadHandlerInProgress ) then
                xmnetwork.downloadHandlerInProgress (event)
            end
            if ( event.bytesEstimated <= 0 ) then
                print( "下载进度:" .. event.bytesTransferred )
            else
                print( "下载进度:" .. (event.bytesTransferred / event.bytesEstimated) * 100 .. "'%'")
--                log("xmnetwork.download", "downloading :" .. (event.bytesTransferred / event.bytesEstimated) * 100 .. "'%'")
            end
        elseif ( event.phase == "ended" ) then
            print( "下载完成,共传输的字节数:" .. event.bytesTransferred )
            if(xmnetwork.downloadHandlerFinished) then
                xmnetwork.downloadHandlerFinished(event)
            end
        end
    end

    local params = {}

    -- 告诉 network.request() 我们想要“began”和“progress”事件:
    params.progress = "download"

    -- 告诉 network.request() 输出应该去一个文件:
    params.response = {
        filename = localFilename,
        baseDirectory = basedir
    }

    xmnetwork.network.request( url, "GET", downloadListener,  params )
end
2014-10-18 08:47:06