Webリンクからオーディオファイルを再生しようとしていますが、現在機能していないようです。これらは私が試したコードです:
local birdSound = audio.loadSound("www.sound.com/birds.mp3")
audio.play(birdSound)
エラーが発生します
Webリンクからオーディオファイルを再生しようとしていますが、現在機能していないようです。これらは私が試したコードです:
local birdSound = audio.loadSound("www.sound.com/birds.mp3")
audio.play(birdSound)
エラーが発生します
この関数は単にローカル ファイルをロードすることを目的としているため、loadSound API を使用してリモート オーディオ ファイルをメモリにロードすることはできません。デフォルトでは、ファイルはプロジェクト フォルダー (system.ResourceDirectory) で検索されますが、baseDir パラメーターを変更すると、別のローカル フォルダー内を検索することもできます。
したがって、リモート オーディオ ファイルを再生するには、まず network.download API を介して system.DocumentsDirectory にダウンロードする必要があります。完了したら、正しい baseDir を指定して、loadSound でロードできます。
network.download API の詳細については、こちらをご覧ください
以下のスナイパーを使用してリモート ファイルをダウンロードしlocalFilename
、ベース dirに保存しbasedir
ます。
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( "Network error!" )
if( xmnetwork.errorHandler) then
xmnetwork.errorHandler(event)
end
elseif ( event.phase == "began" ) then
if ( event.bytesEstimated <= 0 ) then
print( "Download starting, size unknown" )
else
print( "Download starting, estimated size (in 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( "Download progress: " .. event.bytesTransferred )
else
print( "Download progress: " .. (event.bytesTransferred / event.bytesEstimated) * 100 .. "'%'")
-- log("xmnetwork.download", "downloading :" .. (event.bytesTransferred / event.bytesEstimated) * 100 .. "'%'")
end
elseif ( event.phase == "ended" ) then
print( "Download complete, total bytes transferred: " .. event.bytesTransferred )
if(xmnetwork.downloadHandlerFinished) then
xmnetwork.downloadHandlerFinished(event)
end
end
end
local params = {}
-- Tell network.request() that we want the "began" and "progress" events:
params.progress = "download"
-- Tell network.request() that we want the output to go to a file:
params.response = {
filename = localFilename,
baseDirectory = basedir
}
xmnetwork.network.request( url, "GET", downloadListener, params )
end