gpt4 book ai didi

c# - Xamarin C#Android-将.3gpp音频转换为字节并发送到parseObject

转载 作者:行者123 更新时间:2023-12-03 00:45:48 25 4
gpt4 key购买 nike

我对处理录制的声音还很陌生。
我可以成功地将音频录制到.3gpp文件中,将其保存在本地移动设备上,然后进行播放。

我遇到的麻烦是我想将声音文件转换为二进制文件,以便可以将其粘贴到parseObject中,然后将文件上传到云中。然后,我希望能够从单独的设备访问该文件并进行流式处理。

-更新---我不再使用二进制文件,而是使用parseFile对象。我现在只需要将对象从云中拉下即可。

这是我用来记录音频(工作)的代码:

string sName;
string path = "/storage/extSdCard/";
string newPath = "";


_start.Click += delegate {
_stop.Enabled = !_stop.Enabled;
_start.Enabled = !_start.Enabled;
sName = _edittext.Text;

if (sName.Equals(" "))
{

}
else
{
//user enters a name for ther audio file
newPath = path + sName + ".3gpp";
_recorder.SetAudioSource (AudioSource.Mic);
_recorder.SetOutputFormat (OutputFormat.ThreeGpp);
_recorder.SetAudioEncoder (AudioEncoder.AmrNb);
_recorder.SetOutputFile (newPath);
_recorder.Prepare ();
_recorder.Start ();

}

};

_stop.Click += delegate {
_stop.Enabled = !_stop.Enabled;

_recorder.Stop ();
// _recorder.Reset ();

_player.SetDataSource (newPath);
_player.Prepare ();
_player.Start ();
};

这是我用来将数据发送到云的类-单击按钮即可执行并起作用,它当前将硬编码的字符串发送到我可以成功检索的对象中。
但是,我希望将二进制字符串放入testObject [“audio”]中,以便可以检索它。
async Task sendToCloud()
{

ParseClient.Initialize ("--I've put my keys here but I'm censoring them--", "--I've put my keys here but I'm censoring them--");

try
{

byte[] data =null;
ParseFile file = null;
using (StreamReader reader = new StreamReader(LoadPath))
{
data = System.Text.Encoding.UTF8.GetBytes(reader.ReadToEnd());
file = new ParseFile("theaudio.3gpp", data);
}
Console.WriteLine("Awaiting reader");
await file.SaveAsync ();

var auidoParseObject = new ParseObject("AudioWithData");
//Console.WriteLine(ParseUser.getUserName());
auidoParseObject["userName"] = "userName";
auidoParseObject["file"] = file;
await auidoParseObject.SaveAsync();
}

任何帮助将不胜感激。

编辑2:
我正在努力取得一些进展,但是我仍然在努力从云端获取音频文件。
这是我的新代码:
异步任务sendToCloud(字符串文件名)
{
        ParseClient.Initialize ("censored", "censored");

var testObject = new ParseObject ("Audio");

string LoadPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
string savetheFile = sName + ".3gpp";
string tempUserName;
LoadPath += savetheFile;
Console.WriteLine ("loadPath: " + LoadPath);
try
{

byte[] data = File.ReadAllBytes(LoadPath);
ParseFile file = new ParseFile(savetheFile, data);
await file.SaveAsync();

var auidoParseObject = new ParseObject("AudioWithData");
//Console.WriteLine(ParseUser.getUserName());
if (ParseUser.CurrentUser != null)
{
tempUserName = ParseUser.CurrentUser.Username.ToString();
}

else{
tempUserName = "Anonymous";
}
//tempUserName = ParseUser.CurrentUser.Username.ToString();
Console.WriteLine("PARSE USERNAME: " + tempUserName);

auidoParseObject["userName"] = tempUserName;


auidoParseObject["userName"] = tempUserName;
auidoParseObject["file"] = file;
await auidoParseObject.SaveAsync();

}

catch (Exception e)
{
Console.WriteLine("Failed to await audio object! {0}" + e);
}

}

因此,目前,我的对象具有以下结构:
“auidoParseObject”包含两个子代:用户名(字符串)和文件(ParseFile对象)
"file"有两个子级:音频名称(由用户-string输入)和以字节为单位的数据。

我需要将音频放入mdeiaplayer播放器对象中,然后播放。

从长远来看,我想提取一下:
(原谅我的伪SQL,但我不理解查询文档):

从(audioParseObject)中选择(所有文件)其中(用户名=当前用户。用户名)

然后
将这些文件放入列表 View

用户从列表 View 中选择一个文件,然后播放。

任何帮助或指针将是巨大的。
谢谢。

最佳答案

Parse在其站点上的示例确实非常好docs-您已阅读它们吗?

首先,您将使用ParseFile(而不是ParseObject)来保存文件

byte[] data = File.ReadAllBytes(path_to_your_file);
ParseFile file = new ParseFile("your_file_name_and_ext", data);
await file.SaveAsync();

保存文件后,可以在ParseObject中添加对该文件的引用
testObject ["audio"] = file;

若要稍后检索文件,请使用ParseFile中的Url属性。
var file = testObject.Get<ParseFile>("audio");
byte[] data = await new HttpClient().GetByteArrayAsync(file.Url);

关于c# - Xamarin C#Android-将.3gpp音频转换为字节并发送到parseObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com