游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:558

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 397|回复: 10

[脚本] 【Unity3D】对场景内声音录音并保存成音频文件

[复制链接]  [移动端链接]
排名
17480
昨日变化
8

4

主题

17

帖子

79

积分

Rank: 2Rank: 2

UID
283777
好友
0
蛮牛币
243
威望
0
注册时间
2018-6-1
在线时间
24 小时
最后登录
2018-9-28
发表于 2018-6-8 14:44:29 | 显示全部楼层 |阅读模式
80蛮牛币
鄙人在做一个联机项目,每个房间可同时接入2个用户。现在需要一个脚本可以记录两人的声音并保存为文件。
急求!!
[发帖际遇]: Nortrom 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
688/1000
排名
5140
昨日变化
40

2

主题

186

帖子

688

积分

Rank: 5Rank: 5

UID
227258
好友
1
蛮牛币
984
威望
0
注册时间
2017-6-17
在线时间
232 小时
最后登录
2018-10-19
发表于 2018-6-8 14:44:30 | 显示全部楼层
这个...................

Records.zip

5.95 KB, 下载次数: 26


回复

使用道具 举报

5熟悉之中
688/1000
排名
5140
昨日变化
40

2

主题

186

帖子

688

积分

Rank: 5Rank: 5

UID
227258
好友
1
蛮牛币
984
威望
0
注册时间
2017-6-17
在线时间
232 小时
最后登录
2018-10-19
发表于 2018-6-8 15:35:33 | 显示全部楼层
稍等0.00.0

回复

使用道具 举报

6蛮牛粉丝
1167/1500
排名
1730
昨日变化
1

2

主题

45

帖子

1167

积分

Rank: 6Rank: 6Rank: 6

UID
208076
好友
0
蛮牛币
3935
威望
0
注册时间
2017-2-23
在线时间
402 小时
最后登录
2018-10-16
发表于 2018-6-8 15:50:04 | 显示全部楼层
接一个sdk可以搞

回复

使用道具 举报

5熟悉之中
688/1000
排名
5140
昨日变化
40

2

主题

186

帖子

688

积分

Rank: 5Rank: 5

UID
227258
好友
1
蛮牛币
984
威望
0
注册时间
2017-6-17
在线时间
232 小时
最后登录
2018-10-19
发表于 2018-6-8 15:55:46 | 显示全部楼层
尴尬,实在是找不到了,当时忘了是不是用的讯飞,然后在网上找的序列化录音数据保存到本地的代码,然后改了改就行了。
百度看看吧,unity 录音

回复

使用道具 举报

排名
17480
昨日变化
8

4

主题

17

帖子

79

积分

Rank: 2Rank: 2

UID
283777
好友
0
蛮牛币
243
威望
0
注册时间
2018-6-1
在线时间
24 小时
最后登录
2018-9-28
 楼主| 发表于 2018-6-8 17:46:58 | 显示全部楼层
夏目冬青 发表于 2018-6-8 15:55
尴尬,实在是找不到了,当时忘了是不是用的讯飞,然后在网上找的序列化录音数据保存到本地的代码,然后改了 ...

有点赶时间,项目要写不完了,所以想求段现成的代码

回复

使用道具 举报

5熟悉之中
688/1000
排名
5140
昨日变化
40

2

主题

186

帖子

688

积分

Rank: 5Rank: 5

UID
227258
好友
1
蛮牛币
984
威望
0
注册时间
2017-6-17
在线时间
232 小时
最后登录
2018-10-19
发表于 2018-6-8 19:32:13 | 显示全部楼层
Nortrom 发表于 2018-6-8 17:46
有点赶时间,项目要写不完了,所以想求段现成的代码

好像找到了,你看看能不能用吧

回复

使用道具 举报

5熟悉之中
688/1000
排名
5140
昨日变化
40

2

主题

186

帖子

688

积分

Rank: 5Rank: 5

UID
227258
好友
1
蛮牛币
984
威望
0
注册时间
2017-6-17
在线时间
232 小时
最后登录
2018-10-19
发表于 2018-6-8 19:33:25 | 显示全部楼层
本帖最后由 夏目冬青 于 2018-6-8 19:35 编辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using LitJson;
public partial class MicroPhoneManager : MonoBehaviour
{
    private static MicroPhoneManager m_instance;

    private static string[] micArray = null; //录音设备列表
    private AudioClip audioClip;
    private DateTime beginTime;

    public float sensitivity = 100;
    public float loudness = 0;

    const int HEADER_SIZE = 44;
    const int RECORD_TIME = 10;
    const int RECORD_RATE = 44100; //录音采样率

    //void Awake()
    //{
    //    m_instance = this;
    //}

    //private void Start()
    //{
    //    micArray = Microphone.devices;
    //    if (micArray.Length == 0)
    //    {
    //        Debug.LogError("no mic device");
    //    }
    //    foreach (string deviceStr in Microphone.devices)
    //    {
    //        Debug.Log("device name = " + deviceStr);
    //    }
    //}
    public static MicroPhoneManager GetInstance()
    {
        if (m_instance == null)
        {
            micArray = Microphone.devices;
            if (micArray.Length == 0)
            {
                Debug.LogError("no mic device");
            }
            foreach (string deviceStr in Microphone.devices)
            {
                Debug.Log("device name = " + deviceStr);
            }
            GameObject micManager = new GameObject("MicManager");
            m_instance = micManager.AddComponent<MicroPhoneManager>();
        }
        return m_instance;
    }

    /// <summary>
    /// 开始录音
    /// </summary>
    public void StartRecord()
    {
        if (micArray.Length == 0)
        {
            Debug.Log("No Record Device!");
            return;
        }
        Microphone.End(null);//录音时先停掉录音,录音参数为null时采用默认的录音驱动
        beginTime = DateTime.Now;
        audioClip = Microphone.Start(null, false, RECORD_TIME, RECORD_RATE);//默认十秒
        while (!(Microphone.GetPosition(null) > 0))
        {
        }
        Debug.Log("StartRecord");
    }

    /// <summary>
    /// 停止录音
    /// </summary>
    public void StopRecord()
    {
        if (micArray.Length == 0)
        {
            Debug.Log("No Record Device!");
            return;
        }
        if (!Microphone.IsRecording(null))
        {
            return;
        }
        Microphone.End(null);
        Debug.Log("StopRecord");

        SaveAudioClip();
    }

    /// <summary>
    ///播放录音
    /// </summary>
    public void PlayRecord()
    {
        PlayRecord(audioClip);
    }
    public void PlayRecord(AudioClip clip)
    {
        PlayRecord(clip, Vector3.zero);
    }

    public void PlayRecord(AudioClip clip, Vector3 pos)
    {
        if (clip == null)
        {
            Debug.Log("audioClip is null");
            return;
        }
        AudioSource.PlayClipAtPoint(clip, pos);
        Debug.Log("PlayRecord");
    }


    public byte[] Save()
    {
        if (audioClip == null) return null;
        return WavUtility.FromAudioClip(audioClip);
    }

    public void Save(string path, string filename)
    {
        Save(audioClip, path, filename);
    }

    public void Save(AudioClip clip, string path, string filename)
    {
        if (clip == null)
        {
            Debug.Log("clip is null,can't be saved");
            return;
        }
        WavUtility.FromAudioClip(clip, out path, true,filename);
    }

    public AudioClip Read(string path)
    {
        return WavUtility.ToAudioClip(path);
    }

    public AudioClip Read(byte[] data)
    {
        return WavUtility.ToAudioClip(data);
    }

    public JsonData SaveAudioClip()
    {
        //JObject jd = new JObject();
        //jd["time"] = beginTime.ToString("yyMMdd-HHmmss-fff");
        ////jd["time"] = beginTime.ToFileTime();
        ////使用Unicode编码,其他编码格式会有问题
        //jd["audioclip"] = System.Text.Encoding.Unicode.GetString(Save());
        //return jd;

        JsonData jd = new JsonData();
        jd["time"] = beginTime.ToString("yyMMdd-HHmmss-fff");
        jd["audioclip"] = System.Text.Encoding.Unicode.GetString(Save());
        return jd;
    }
}
用到的方法在下面

回复

使用道具 举报

排名
17480
昨日变化
8

4

主题

17

帖子

79

积分

Rank: 2Rank: 2

UID
283777
好友
0
蛮牛币
243
威望
0
注册时间
2018-6-1
在线时间
24 小时
最后登录
2018-9-28
 楼主| 发表于 2018-6-8 21:16:06 | 显示全部楼层
夏目冬青 发表于 2018-6-8 19:37
这个...................

LitJson包没有啊
[发帖际遇]: 一个袋子砸在了 Nortrom 头上,Nortrom 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
17480
昨日变化
8

4

主题

17

帖子

79

积分

Rank: 2Rank: 2

UID
283777
好友
0
蛮牛币
243
威望
0
注册时间
2018-6-1
在线时间
24 小时
最后登录
2018-9-28
 楼主| 发表于 2018-6-8 21:19:37 | 显示全部楼层
夏目冬青 发表于 2018-6-8 19:37
这个...................

ok找到了,我挂上去试试

回复

使用道具 举报

排名
61967
昨日变化
44

5

主题

39

帖子

48

积分

Rank: 1

UID
276076
好友
0
蛮牛币
0
威望
0
注册时间
2018-4-8
在线时间
2 小时
最后登录
2018-7-31
发表于 2018-6-10 14:13:39 | 显示全部楼层

接一个sdk可以搞

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表