我需要使用QML在BB10上制作小应用程序,它可以录制和播放一些声音。我需要permision(麦克风和商店文件)和这段代码:
import bb.cascades 1.0
import bb.multimedia 1.0
Page {
property string dataUrl;
Container {
background: Color.create("#001100")
layout: StackLayout {
}
attachedObjects: [
MediaPlayer {
id: audioPlayer
sourceUrl: dataUrl + "/recording.mp4"
},
AudioRecorder {
id: recorder
outputUrl: dataUrl + "/recording.mp4"
}
]
Button {
id: btnRecord
text: "Record"
onClicked: {
recorder.record();
}
}
Button {
id: btnStop
text: "Stop Record"
onClicked: {
recorder.reset();
}
}
Button {
text: "Play Audio"
onClicked: {
audioPlayer.play()
}
}
Button {
text: "Stop Audio"
onClicked: {audioPlayer.stop()
}
}
}
}
跑步后我可以看到所有按钮,但录制和/或播放不起作用。我不知道出了什么问题。我看不出任何错误。
答案 0 :(得分:1)
你快到了。问题是你sourceUrl
错了。存储录制内容的最佳位置在您的应用data directory中,但您的QML不知道它在哪里。
要解决此问题,您需要使用C ++将应用程序的数据路径公开给QML。您可以使用属性(more info here)执行此操作。
在您创建AbstractPane
对象的位置(在我的案例中称为root
)下添加以下C ++代码。这通常在applicationui.cpp
中完成。
root->setProperty("dataUrl", "file://" + QDir::currentPath() + "/data");
现在将dataUrl
属性添加到您的QML并将其用于sourceUrl
:
Page {
property string dataUrl;
Container {
background: Color.create("#001100")
layout: StackLayout {
}
attachedObjects: [
MediaPlayer {
id: audioPlayer
sourceUrl: dataUrl + "/recording.m4a"
},
AudioRecorder {
id: recorder
outputUrl: dataUrl + "/recording.m4a"
}
]
....
}
编辑:确保在完成录制后拨打audioPlayer.reset()
,这会强制播放器重新加载录制的音频。如果不这样做,您的音频播放可能会被截断。