最近一直找游戏设计灵感。

找着找着,突然想起,以前玩过的一款打飞机游戏,端游,他可以根据你播放的音乐文件来自动发射子弹,玩家不是能自主发射子弹的,当时我就一直拿那个:《劲乐团》里的一首曲子:《V3》- 贝多芬交响曲。

这首曲子,全程高能,整个屏幕都是子弹,爽啊,哈哈,而且这首曲子也很嗨。

当然与音乐相关的游戏还不止这款。。。

相关游戏:

  • 劲舞团(韩国T3 娱乐公司开发,游戏开发技术没有与音乐有关,这游戏只是编辑定时弹出什么QTE的按键序列而已)
  • 劲乐团(韩国O2Media游戏公司开发,游戏开发技术应该是用到了声乐文件的音频spectrum图谱的分析,先自动生成一个节奏点相关的QTE数据,然后再人工审核一下生产的内容,可减少开发成本,因为如果全程人工编辑,那个编辑人力成本太高了)
  • 节奏大师(同上,腾讯光速工作室开发)
  • QQ音速(同上,腾讯代理,韩国seed9开发)
  • 某些游戏也会根据我们的音波来加速移动,发射子弹等。这些就不一一介绍了,玩过想过的太多了。

等等,还有现在新出的各式各样的游戏。基本都会使用到先音频分析自动生成数据,再人工调整。(当然,我只是猜测,肯定有团队是全人工编辑的)

为了找灵感,再尝试试API来制作一些功能,再未来开发,也许有帮助。

OK,扯题的话就不说了。

运行总体效果如下图:(没有声音)
在这里插入图片描述

录制

Microphone类使用到的几个API

  • public static string[] devices { get; }
    获取可用的麦克风的设备名称数组
  • public static AudioClip Start(string deviceName, bool loop, int lengthSec, int frequency);
    使用指定deviceName设备开始录制
  • public static void End(string deviceName);
    指定deviceName设备结束录制
  • public static int GetPosition(string deviceName);
    获取麦克风当前对应设备写入录制缓存的索引位置
  • public static bool IsRecording(string deviceName);
    获取指定deviceName设备名称是否当前录制中

OK,就这么几个是主要的。

录制步骤

  • 先检测有没设备Microphone.devices.Length > 0
  • 开始录制调用Microphone.Start,要传入使用的设备名,是否环形循环录制缓存,录制缓存支持的时长,录制的采样率
    • 设备名就Microphone.devices里头其一
    • 是否环形循环录制缓存意思就是是否录制数据写到尾部是,是从将写入指标重置会开头(0索引)
    • 录制缓存支持的时长,就是如果不是环形循环录制的话,那么录制时间到了,就不会再录制
    • 录制采样率,这个决定了录制出来声音的质量,采样率越高当然就越接近原声
      • 但采样率不能乱设置,下面会相关的知识点讲到采样率是什么东东
  • 等待录制时间到达,就自动取消录制(或时手动的在时间到达之前结束录制)
  • 播放刚刚录制的AudioClip,已测试是否有效。
    • 如果听不到声音,请检查:
      • 播放该AudioClip的AudioSource的Volume(音量);
      • 如果AudioSource的Spatial Blend是2D的,那就确定场景中至少有一个AudioListener组件时启用的。
      • 如果AudioSource的Spatial Blend是3D的,那就确定启用的AudioListener与你播放的AudioSource的距离保持在AudioSource的MinDistance与MaxDistance之前。
      • 在调用Microphone.Start中的frequency确定是在能听到的范围,一般设置在:1000~44100之间就可以了(小于100的几乎都听不到,之前不小心设置错了Slider.Value的值为1,传了个1过去,导致录制出来的AudioClip没有任何声音)
      • 还是听不到,那就确保你的音响设备的音量,与设备是否正常。

相关的知识点

  • 声频:指的是声波介质,每秒震动的次数,单位交:赫兹,英文:Hz,人类能听到的声频大概是:20Hz~20000Hz。低于20Hz我们叫超低音声波,高于20000Hz我们叫超高音波(超音波)。而不同物种,他们声频生物传感器是不一样的,如:蝙蝠,相对人类来说的部分超低高音都可以听到,但它能听到的范围也是有限的。
  • 声波:而声波是介质震动(一般指的是空气)时的振动波,现实生活中我们听到的声音都是一些连续不间断的声波,声波进入了我们的耳朵(接受声波处理的生物传感器),就听到声音了
  • 采样率:因为声波是连续不间断的,但我们记录的是离散的数字信号,采样率就是每秒记录的次数。如:44100次/每秒,就是我们常见的44KHz。但是采样率越高记录所需要的数据量就越大。相反,越低的采样率,数据量就很少了,但是音质会很差,甚至低到一定程度,我们都几乎听不到。我们平时看到保安人员的对讲机,大概就是1KHz,我们一些高音质的MP3等音频文件有16KHz,32KHz,44KHz,都有,有些电影院的那些可能上MHz都是有的。
  • 比特率:和采样率差不多的意思,只是他主要表达的是每秒需要记录用到的bit位有多少,考量维度不一样,前者是记录次数,后者是使用bit的量,就可以很准确的确定数据占用量。

音波图(不是声谱Spectrum)

至于声谱图,我没去研究过,这里不涉及。

AudioClip类API

  • public bool GetData(float[] data, int offsetSamples);
    从AudioClip中,指定offsetSamples的位置开始读取音波数据存入我们预先创建的float[] data缓存中。

AudioClip是我们的音频对象。

  • Microphone.Start返回的是AudioClip。
  • Project视图管理资源中,音频文件也是AudioClip。

而我们就是通过这个AudioClip.GetData来取对应缓存位置记录的音波数据的,然后根据这些数据我们将它用于控制一些粒子特效,或是线条,几何体,颜色变化,等来表现我们的音波图的。

下图就是根据此API制作的简单的音波图。(我放了很多个:RawImage,然后用AudioClip.GetData取出来的数据分别控制他们的宽度,及颜色即可,这首史诗级曲子:EI Dorado也是我非常喜欢的,有兴趣可以听听)
在这里插入图片描述

扩展

  • 播放器,KTV,KTV评分系统:有些前面哪些功能,起始如果上对各音频文件的编解码处理,你甚至可以制作一些播放器了(在搞一些文件读写就好了),录制的话,你要可以搞个人KTV录制。还可以分析音波与原唱的音波图相似度来评KTV录制结果分数。

  • 无时间限制录制文件功能:还有一个,起始还可以写一个无时间长度限制的录音软件。
    但是还需要对代码调整(就是判断Microphone.GetPosition差不多到缓存尾部的时候,马上再调用Microphone.Start记录重新录制就好了,再将之前录制的那个AudioClip的数据写入文件流啊,就可以了)

  • 简单语音录制的聊天系统:游戏,或是应用中的简单语音录制的聊天系统,前面讲了怎么怎么录制,怎么怎么从AudioClip拿数据,还有,下面的Code中,也有显示AudioClip.SetData怎么怎么使用,那么就可以将GetData的float[]转到byte[],在通过Socket的网络传输到服务器,服务器再广播,其他接受的客户端先将byte[]转float[],再就AudioClip.SetData,再AudioSource.Clip = 你的Clip,再AudioSource.Play,完事。

Code

using System;
using System.Collections.Generic;
using Unity.Collections;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// author      :   jave.lin
/// date        :   2020.02.18
/// 测试录制麦克风的各种功能
/// </summary>
public class RecordMicrophoneSoundScript : MonoBehaviour
{public enum RecordStatusType{Unstart,Recording,End,}public enum RecordErrorType{None,NotFoundDevice,RecordingError,}[Space(10)]public Text playSoundWaveText;public AudioClip music;[Space(10)]public Text startOrEndRecordBtnText;public Text statusText;public Text detailStatusText;public Text deviceCaptureFreqText;[Space(10)]public Dropdown deviceDropdownList;public Dropdown frequencyDropdownList;public Slider recordTimeSlider;public Text recordTimeText;public Text playProgressText;public Text recordTimeProgressText;public Slider playProgressSlider;public Slider recordTimeProgressSlider;public Text detailRecordClipText;[Space(10)]public Color32 lineLowCol = new Color32(1, 1, 0, 1);public Color32 lineHightCol = new Color32(1, 0, 0, 1);public int lineW;public RawImage[] lines;[Space(10)][SerializeField] [ReadOnly] private RecordStatusType recordStatus;[SerializeField] [ReadOnly] private RecordErrorType errorStatus;[SerializeField] [ReadOnly] private AudioClip recordedClip;private AudioSource audioSource;            // 播放的sourceprivate bool startRecord;private int posWhenEnd;private float[] bufferHelper;[SerializeField] private float[] soundWaveBuffer;[SerializeField] private float[] soundWaveBuffer2;private void Awake(){audioSource = GetComponent<AudioSource>();soundWaveBuffer = new float[lines.Length];soundWaveBuffer2 = new float[lines.Length];}private void Start(){deviceDropdownList.ClearOptions();deviceDropdownList.AddOptions(new List<string>(Microphone.devices));deviceDropdownList.value = 0;deviceDropdownList.RefreshShownValue();for (int i = 0; i < lines.Length; i++) SetLine(i, 2, 1);}private void Update(){UpdateAllStatus();}private void SetLine(int idx, float multiplier = 2.0f, float t = 0.1f){var line = lines[idx];var v = line.rectTransform.sizeDelta;var data = soundWaveBuffer[idx];v.x = Mathf.Lerp(v.x, lineW * data * multiplier, t);line.rectTransform.sizeDelta = v;line.color = Color.Lerp(lineLowCol, lineHightCol, Mathf.Abs(data));}// 更新音波数据,这里我就不叫spectrumprivate void UpdateSoundWaveData(AudioClip clip, int pos){if (clip != null){var offsetPos = pos - lines.Length;if (offsetPos > 0) clip.GetData(soundWaveBuffer, offsetPos);    // 如果clip当前录制位置,截取够lines.length的数量else{// 如果不够// 先截取尾部的作为起始数据clip.GetData(soundWaveBuffer, clip.samples + offsetPos);var delta = lines.Length + offsetPos;if (delta > 0){// 再截取补长的数据,再clip前面部分// 因为录制时,我们开启了环形缓存// public static AudioClip Start(string deviceName, bool loop, int lengthSec, int frequency)中的第二个参数决定,我们写死trueclip.GetData(soundWaveBuffer2, 0);Array.Copy(soundWaveBuffer2, 0, soundWaveBuffer, -offsetPos, delta);}}playSoundWaveText.text = $"PlaySoundWave : {clip.name}";}}// 更新音波的可视线private void UpdateSoundLines(){for (int i = 0; i < lines.Length; i++) SetLine(i);}// 更新一些状态private void UpdateAllStatus(){if (Microphone.devices.Length == 0){errorStatus = RecordErrorType.NotFoundDevice;return;}else{var deviceName = deviceDropdownList.captionText.text;Microphone.GetDeviceCaps(deviceName, out int minFreq, out int maxFreq);deviceCaptureFreqText.text = $"Device Capture MinFreq:{minFreq} MaxFreq:{maxFreq}";var isRecording = Microphone.IsRecording(deviceName);if (isRecording){recordStatus = RecordStatusType.Recording;// 使用GetPosition获取写入缓存的位置与缓存大小的比例值,再乘以录制秒数,就可以得到准确的录制时长var pos = Microphone.GetPosition(deviceName);var recordProgress = recordedClip.length * ((float)pos / recordedClip.samples);recordTimeProgressText.text = $"{recordProgress.ToString("00.0")}";recordTimeProgressSlider.value = recordProgress;// update sound wave ( not a spectrum )UpdateSoundWaveData(recordedClip, pos); // 更新录制的音波数据UpdateSoundLines();                     // 更新音波的可视线}else{if (recordedClip == null){recordStatus = RecordStatusType.Unstart;}else{recordStatus = RecordStatusType.End;}}startOrEndRecordBtnText.text = startRecord ? "EndRecord" : "StartRecord";var recordPostion = Microphone.GetPosition(deviceName);// Debug.Log($"deviceName:{deviceName} isRecording:{isRecording} recordPosition:{recordPostion}");detailStatusText.text = $"deviceName:{deviceName} isRecording:{isRecording} recordPosition:{recordPostion}";statusText.text = $"Status : {recordStatus}, Error:{errorStatus}";if (recordedClip != null){detailRecordClipText.text = $"RecordClipInfo:len:{recordedClip.length},freq:{recordedClip.frequency},channels:{recordedClip.channels},samples:{recordedClip.samples},ambisonic:{recordedClip.ambisonic},loadType:{recordedClip.loadType},preloadAudioData:{recordedClip.preloadAudioData},loadInBg:{recordedClip.loadInBackground},loadState:{recordedClip.loadState}";}if (audioSource.clip != null){//Debug.Log($"audioSource.timeSamples:{audioSource.timeSamples}");playProgressSlider.minValue = 0;playProgressSlider.maxValue = audioSource.clip.length;playProgressSlider.value = audioSource.time;playProgressText.text = $"{audioSource.time.ToString("00.0")}";var percent = audioSource.time / audioSource.clip.length;UpdateSoundWaveData(audioSource.clip, (int)(percent * audioSource.clip.samples));   // 更新播放的音波数据UpdateSoundLines();             // 更新音波的可视线}else{playProgressSlider.value = playProgressSlider.minValue;}}}// 给DropDown控制绑定的On Value Change 的事件方法public void OnDeviceItemSelectionChanged(int idx){var selection = deviceDropdownList.options.Count > 0 ? deviceDropdownList.options[idx].text : "EMPTY";Debug.Log($"Devices DropDownList Item Selection Changed, idx : {idx}, selection : {selection}");}public void OnStartOrEndRecordBtnClick(){if (Microphone.devices.Length == 0){errorStatus = RecordErrorType.NotFoundDevice;return;}var deviceName = deviceDropdownList.captionText.text;var isRecording = Microphone.IsRecording(deviceName);if (isRecording)    // 录制中{posWhenEnd = Microphone.GetPosition(deviceName);// 那么就取消录制 - cancel recordingMicrophone.End(deviceName);recordStatus = RecordStatusType.End;startRecord = false;}else                // 没在录制{if (recordedClip != null) Destroy(recordedClip);// 人耳可以听到的声频为:20Hz~20000Hz左右// 音频采样频率(即:离散的采样点组合的模拟声波震动频率(每秒多少次,单位名:赫兹:Hz))// 经自己的测试发现:// 8820‬ = 44100 / 5:和微信的录制频率差不多(甚至微信的更低,数据小啊)// 11025 = 44100 / 4 ~ 44100:都差不多,不认真听都差不多// 22050 = 44100 / 2// 44100// 88200 = 44100 * 2// 频率越高,音质越高,但占用数据越大var frequency = Convert.ToInt32(frequencyDropdownList.captionText.text);recordedClip = Microphone.Start(deviceName, true, (int)recordTimeSlider.value, frequency);startRecord = true;recordTimeProgressSlider.minValue = 0;recordTimeProgressSlider.maxValue = (int)recordTimeSlider.value;recordTimeProgressSlider.value = 0;if (recordedClip == null) errorStatus = RecordErrorType.RecordingError;}}public void OnPlayClipBtnClick(){if (recordedClip != null){var playingClip = AudioClip.Create("MicrophoneRecord", posWhenEnd, recordedClip.channels, recordedClip.frequency, recordedClip.loadType == AudioClipLoadType.Streaming);if (bufferHelper == null || bufferHelper.Length < posWhenEnd) bufferHelper = new float[posWhenEnd];recordedClip.GetData(bufferHelper, 0);playingClip.SetData(bufferHelper, 0);// 通过上面对playingClip的重新构建,playingClip.length是最精准的了就不是我们固定的长度了audioSource.clip = playingClip;audioSource.Play();}}public void OnPauseBtnClick(){audioSource.Pause();}public void OnStopPlayClipBtnClick(){audioSource.Stop();}public void OnRecorddTimeSliderValueChanged(float value){// recordTimeText.text = $"{value}s"; // 这里value一直未0有BUGrecordTimeText.text = $"{recordTimeSlider.value}s";}public void OnPlayMusicBtnClick(){audioSource.clip = music;audioSource.Play();}
}

Project

RecordingMicrophoneSoundTesting_2019_3_1f1

Unity使用:2019.3.1f1,为何要讲这个,因为我讲2019.3.1f1降版本到2018.3.0f2的unity后,Scene里记录的Hierachy的对象绑定的各种Component的数据都丢失了。

本想用2019来制作测试,拿回2018发布到手机测试的,结果。。。。。。咳咳。。。(因为2019发布版本目前会卡Building Gradle Project的问题,官方网络限制中国区域的问题,需要翻墙,梯子,你才能正常发布,而现在VPN限制这么严,所以就没去用2019发布,暂时没那这个录制功能到手机端上测试)

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Dev c++工具将C代码生成dll文件以及如何调用dll文件

    该篇文章是对工作中一个需求的总结,工作需求是要将C语言的函数接口,生成一个DLL文件,让labview调用。然后我尝试用devc++开发工具来实现这个功能,后来因为DLL生成了,但labview调用的结果和C执行的结果不一致,因此我需要再调用下自己生成的DLL是否正确来定位出错的环节,因…...

    2024/5/2 23:15:14
  2. 算法:循环赛日程表_一般化(n可以为奇数,也可以为偶数)

    算法思路:算法思路(N可能为奇数,也可能是偶数)总体思路:按分治策略,将所有分为两半,n个选手可以通过n/2个选手设计的比赛日程表来决定。递归地用一分为二的略对选手进行分割,直到只剩下两个选手。对于N为奇数的情况可以虚拟多一个选手,使其编程N+1个选手的日程表,最然后…...

    2024/5/3 4:46:47
  3. devc++(devcpp) 玩转 gsoap

    项目中,有个需求是终端调用webservice。我主要负责webservice这一块,如果要测试的话要跟写终端C程序的同事协调,这无疑很费时费力。那么能不能我自己写测试代码测呢?终端是C通过gsoap生成客户端来调用webservice的。于是开始看gsoap,由于C知识贫乏,调试了好久终于有眉目了…...

    2024/4/19 22:52:12
  4. Android中注册一个 BroadcastReceiver的代码

    在工作之余,把开发过程中常用的一些代码备份一下,下面的资料是关于Android中注册一个 BroadcastReceiver的代码,希望对码农们有一些用。 registerReceiver(mMasterResetReciever, new IntentFilter(”oms.action.MASTERRESET”));private BroadcastReceiver mMasterResetRec…...

    2024/5/3 8:11:06
  5. SDWebImage的实现原理(UIImageView+WebCach)

    1.作用: SDWebImageView的功能很强大,其中UIImageView+WebCach.h的功能主要是下载图片,设置图片缓存. 2.原理: 下载图片的原理:通过图片的网站地址URL异步下载图片; 缓存图片的原理:下载完成的图片会被保存的内存和文件中;加载图片的时候…...

    2024/4/12 21:25:23
  6. 反APIHOOK

    外挂作坊系列教材-[第七章 中级进阶]04-反APIHOOK 第三节介绍了全局钩子+APIHOOK进行对其它进程的监控,凡事有了矛必然也会出现盾。在目前的游戏里,外挂与反外挂的技术斗争也越来越激烈,需要知已知彼才能百战百胜。 所以本节要介绍如何反APIHOOK的原理与实现。自从劲舞团这…...

    2024/4/13 23:11:05
  7. SQL CHARINDEX和PATINDEX函数

    CHARINDEX和PATINDEX函数常常用来在一段字符中搜索字符或者字符串。如果被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数。PATINDEX函数支持使用通配符来进行搜索,然而CHARINDEX不支持通佩符。接下来…...

    2024/4/12 21:25:33
  8. devc++界面调整

    求问各位大神,devc++自从手动把下面的编译报错区调整到最小了以后,再拉出来就是这个样子了,应该怎么调整啊?!...

    2024/4/9 7:52:07
  9. __block和__weak

    __weak是为了解决block的循环引用问题.例如:TRBlockObject *blockObj = [TRBlockObject new]; blockObj.block = ^void(void){NSLog(@"blockObj%@“,blockObj);}; 例中,block属性是blockObj对象的;而在block体中,block又引用了blockObj对象,造成了循环引用。解决的…...

    2024/4/12 21:25:28
  10. get_devc.h

    ...

    2024/4/20 3:39:14
  11. sql CHARINDEX() 与 PATINDEX() LEN() substring() COLLATE RAISERROR

    CHARINDEX() 在一个表达式中搜索另一个表达式并返回其起始位置(如果找到)。CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) expressionToFind是字符表达式,其中包含要查找的序列。 expressionToFind限制为 8000 个字符。 expressionToSearch要…...

    2024/4/12 21:25:08
  12. 03.Java数据结构问题

    目录介绍3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代码说明? 3.0.0.2 SparseArray基本介绍,相比HashMap为什么性能会好? 3.0.0.3 Arrays和Collections 对于sort的不同实现原理?说一说它们的区别…… 3.…...

    2024/4/5 1:19:06
  13. 互联网营销七宗罪

    1 色欲(luxuria)——过分强烈的或放纵的性欲关键字:性、约炮、同性、情趣代表产品:成人网站、SP、9158、初期QQ、劲舞团、豆瓣小组、陌陌、快播、摇一摇、六间房、YY、糗事百科、时期、糗事百科2 贪婪-希望占有更多关键字:贪心、贪小便宜 代表产品:点评工具、淘宝等电商、…...

    2024/5/3 2:33:02
  14. 分治——循环比赛日程表

    问题 G: 【例7.4】 循环比赛日程表时间限制: 1 Sec 内存限制: 128 MB题目描述设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。输入输入:M。输出输出:表格形式的比赛安排表。一…...

    2024/4/12 21:25:33
  15. Dev-C++之开启装逼效果

    Dev-C++是个不错的C++IDE——在10年前,它是很不错,在现在,它是个以界面丑陋和调试像吃粑粑这两点著称,如下图。 实在是丑到离谱,丑到无法忍受。可是没办法呀,人家CCF规定比赛用这个,你个小蒟蒻吵什么?我现在就来讲讲怎么把你的Dev-C++快速调得好看得不像Dev-C++。 首先…...

    2024/4/20 11:23:13
  16. 安卓/iOS手机端名片识别sdk

    手机APP在这两年迎来大爆发,但很多APP的体验却非常差,很多移动CRM、移动端OA,依然需要手动输入名片信息;由于名片上的信息比较多,手动输入名片信息,速度慢、易出错,用户体验非常差。为了提高在移动终端上输入名片信息的速度和准确性,北京文通科技有限公司推出文通名片识…...

    2024/4/9 7:52:02
  17. 04.JavaIO流问题

    目录介绍4.0.0.1 说一下Java IO里面的常见类,字节流,字符流、接口、实现类、方法阻塞? 4.0.0.2 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别? 4.0.0.3 字符流和字节流有什么区别?如何选择字节流或者字符流?什么是缓冲区,有什么作用…...

    2024/4/12 21:25:28
  18. CHARINDEX和PATINDEX详解

    CHARINDEX和PATINDEX函数常常用来在一段字符中搜索字符或者字符串。如果被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数。PATINDEX函数支持使用通配符来进行搜索,然而CHARINDEX不支持通佩符。接下来…...

    2024/4/15 7:09:52
  19. 【Unity】2.11 了解游戏有哪些分类对你开阔思路有好处

    分类:Unity、C#、VS2015 创建日期:2016-03-31 一、简介 对游戏类型的划分有助于游戏的市场定位,以便吸引具有同一爱好的玩家群体。此外,制作游戏策划方案时,也通常会依据不同的游戏类型来选择桕应的技术方案,只有通过对游戏类型的划分,才能够策划出符合目标群体的相关游…...

    2024/4/18 5:14:01
  20. 循环赛日程表(计算机算法设计与分析 --王晓东) 2.11

    参考博客:http://blog.csdn.net/liufeng_king/article/details/8488421 问题描述: 设有n = 2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。本…...

    2024/4/12 21:25:13

最新文章

  1. 【MySQL | 第十篇】重新认识MySQL索引匹配过程

    文章目录 10.重新认识MySQL索引匹配过程10.1匹配规则10.2举例&#xff1a;联合索引遇到范围查询&#xff08;>、<、between、like&#xff09;10.2.1例子一&#xff1a;>10.2.2例子二&#xff1a;>10.2.3例子三&#xff1a;between10.2.4例子四&#xff1a;like 10…...

    2024/5/3 8:30:26
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 如何系统地自学Python?

    Python作为一种简单易学且功能强大的编程语言&#xff0c;已经成为许多人入门编程的首选语言。对于想要自学Python的初学者来说&#xff0c;如何有系统地自学Python是一个重要的问题。 本文将介绍一种系统自学Python的方法&#xff0c;帮助初学者快速入门&#xff0c;并逐步提…...

    2024/5/2 9:48:32
  4. iOS问题记录 - App Store审核新政策:隐私清单 SDK签名(持续更新)

    文章目录 前言开发环境问题描述问题分析1. 隐私清单 & SDK签名1.1. 隐私清单 - 数据使用声明1.2. 隐私清单 - 所用API原因描述1.3. SDK签名 2. 即将发布的第三方SDK要求 解决方案最后 前言 前段时间用Flutter开发的iOS App提交了新版本&#xff0c;结果刚过两分钟就收到了…...

    2024/5/2 20:15:59
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57