口述录音机BB10在QML中
我需要使用QML在BB10上制作一个小应用程序,它可以录制和播放一些声音。我有所有需要的许可证(麦克风和存储文件)和此代码:口述录音机BB10在QML中,qml,audio-recording,blackberry-10,Qml,Audio Recording,Blackberry 10,我需要使用QML在BB10上制作一个小应用程序,它可以录制和播放一些声音。我有所有需要的许可证(麦克风和存储文件)和此代码: import bb.cascades 1.0 import bb.multimedia 1.0 Page { property string dataUrl; Container { background: Color.create("#001100") layout: StackLayout { }
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()
}
}
}
}
运行后,我可以看到所有按钮,但录制和/或播放不起作用。我不知道怎么了。我看不出有任何错误 你就快到了。问题是您的
sourceUrl
错误。存储您的录音的最佳位置是在您的应用程序中,但您的QML不知道它在哪里
为了解决这个问题,你需要使用C++来将应用程序的数据路径暴露到QML中。可以使用属性()执行此操作
在创建代码> >抽象窗格< /C>对象(在我的例子中称为代码>根<代码> >的地方添加下面的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()
,这将强制播放机重新加载录制的音频。如果不这样做,音频播放可能会被截断 你就快到了。问题是您的sourceUrl
错误。存储您的录音的最佳位置是在您的应用程序中,但您的QML不知道它在哪里
为了解决这个问题,你需要使用C++来将应用程序的数据路径暴露到QML中。可以使用属性()执行此操作
在创建代码> >抽象窗格< /C>对象(在我的例子中称为代码>根<代码> >的地方添加下面的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()
,这将强制播放机重新加载录制的音频。如果不这样做,音频播放可能会被截断 还是没什么。按钮已显示但未工作。我调试了我的应用程序,看到com.example.Audio.testDev\u ample\u Audiodd28f885.315166862默认9000警告录音机::prepare:连接输入源时出错。url=audio:default,error=UnsupportedMediaType
您使用的是模拟器还是真实设备?模拟器。你认为这是一个问题吗?是的,我认为模拟器不支持通过主机的麦克风录制音频。当你将应用程序部署到模拟器时,是否有任何错误?仍然没有。按钮已显示但未工作。我调试了我的应用程序,看到com.example.Audio.testDev\u ample\u Audiodd28f885.315166862默认9000警告录音机::prepare:连接输入源时出错。url=audio:default,error=UnsupportedMediaType
您使用的是模拟器还是真实设备?模拟器。你认为这是一个问题吗?是的,我认为模拟器不支持通过主机的麦克风录制音频。当你将应用程序部署到模拟器时,是否出现任何错误?