(二四)HarmonyOS Design 的声音设计 原创

小_铁
发布于 2025-3-12 22:20
浏览
0收藏

HarmonyOS Design 的声音设计

在 HarmonyOS 丰富的设计体系中,声音设计是构建沉浸式用户体验的重要组成部分。合理且精妙的声音设计不仅能为用户提供清晰的操作反馈,还能营造独特的氛围,增强应用的吸引力与辨识度。接下来,我们深入探讨 HarmonyOS Design 中声音设计的属性以及在不同设备间的设计方法。

一、声音设计的属性

(一)音量

  1. 操作反馈音量:在应用中,各类操作反馈声音的音量设置需恰到好处。例如,按钮点击音效、提示音等,其音量应适中,既不能过大而显得突兀,干扰用户,也不能过小导致用户难以察觉。在 HarmonyOS 应用开发中,通过代码设置操作反馈声音音量。以 Java 代码为例,使用AudioManager来控制音量:

​AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);​

​int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);​

​// 设置操作反馈声音的音量为当前音乐音量的70%​

​int newVolume = (int) (currentVolume * 0.7);​

​audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, newVolume, 0);​

  1. 媒体音量区分:对于应用中的媒体内容,如视频、音频播放,要与操作反馈声音的音量区分开来,允许用户独立调节。在 ArkTS 中,可通过创建不同的音频控制模块来实现:

​@Entry​

​@Component​

​struct AudioVolumeControls {​

​@State mediaVolume: number = 0.5;​

​@State feedbackVolume: number = 0.5;​

​build() {​

​Column() {​

​Slider({ value: this.mediaVolume, min: 0, max: 1 })​

​.onChange((newValue) => {​

​this.mediaVolume = newValue;​

​// 这里实现设置媒体音量的逻辑​

​})​

​Text('媒体音量调节')​

​Slider({ value: this.feedbackVolume, min: 0, max: 1 })​

​.onChange((newValue) => {​

​this.feedbackVolume = newValue;​

​// 这里实现设置操作反馈音量的逻辑​

​})​

​Text('操作反馈音量调节')​

​}​

​}​

​}​

(二)音色

  1. 个性化音色选择:为了满足不同用户的喜好,应用可以提供多种音色供用户选择。例如,在闹钟应用中,除了默认的铃声音色,还可提供鸟鸣声、流水声等自然音色。在数据库中存储不同音色的音频资源路径,用户选择音色后,应用根据所选音色加载对应的音频文件。在 Kotlin 代码中实现音色选择逻辑:

​val soundOptions = listOf("default_sound", "bird_sound", "water_sound")​

​val selectedSoundIndex = sharedPreferences.getInt("selected_sound_index", 0)​

​val selectedSound = soundOptions[selectedSoundIndex]​

​val soundUri = Uri.parse("android.resource://$packageName/$resources.getIdentifier(selectedSound, "raw", packageName)"​

​val mediaPlayer = MediaPlayer.create(context, soundUri)​

​mediaPlayer.start()​

  1. 音色与功能匹配:不同的应用功能应匹配相应合适的音色。比如,在金融应用中,转账成功的提示音可采用清脆、明快的音色,传达成功与喜悦;而在文件删除操作时,使用低沉、短暂的音色,暗示操作的不可逆性。在代码实现上,为不同操作关联不同音色的音频文件:

​<!-- 在res/raw目录下存放不同音色的音频文件 -->​

​<item name="transfer_success_sound">@raw/transfer_success_tone</item>​

​<item name="file_delete_sound">@raw/file_delete_tone</item>​

在 Java 代码中根据操作类型播放对应音色的音频:

​int operationType = getOperationType(); // 获取操作类型​

​int soundResourceId;​

​if (operationType == OPERATION_TRANSFER_SUCCESS) {​

​soundResourceId = R.raw.transfer_success_sound;​

​} else if (operationType == OPERATION_FILE_DELETE) {​

​soundResourceId = R.raw.file_delete_sound;​

​}​

​MediaPlayer mediaPlayer = MediaPlayer.create(this, soundResourceId);​

​mediaPlayer.start();​

(三)节奏与时长

  1. 操作反馈节奏:操作反馈声音的节奏应与操作本身的性质相匹配。快速的操作,如点击按钮,对应的音效应简洁明快,具有较短的持续时间和较高的节奏;而对于较为复杂或耗时的操作,如文件下载完成提示音,可采用稍长的节奏和持续时间,引起用户的注意。在音频编辑软件中创建符合节奏要求的音效文件,然后在应用中引用。在 ArkTS 中播放节奏不同的操作反馈音效:

​@Entry​

​@Component​

​struct OperationSoundPlayer {​

​playQuickSound() {​

​// 假设quickSoundPath为快速操作音效文件路径​

​const audio = new AudioSource(quickSoundPath);​

​audio.play();​

​}​

​playLongSound() {​

​// 假设longSoundPath为长时间操作音效文件路径​

​const audio = new AudioSource(longSoundPath);​

​audio.play();​

​}​

​build() {​

​Column() {​

​Button("快速操作按钮")​

​.onClick(() => {​

​this.playQuickSound();​

​})​

​Button("长时间操作按钮")​

​.onClick(() => {​

​this.playLongSound();​

​})​

​}​

​}​

​}​

  1. 音频内容时长:对于应用中的音频内容,如语音消息、音频教程等,要合理控制时长。过长的音频可能导致用户失去耐心,而过短又可能无法传达完整信息。在录制音频内容时,根据实际需求和用户注意力集中时间进行时长规划。在代码中,可对音频时长进行监测和提示:

​MediaPlayer mediaPlayer = MediaPlayer.create(this, audioUri);​

​int duration = mediaPlayer.getDuration();​

​if (duration > MAX_ALLOWED_DURATION) {​

​Toast.makeText(this, "音频时长较长,请耐心等待", Toast.LENGTH_SHORT).show();​

​}​

二、声音在不同设备间的设计方法

(一)手机设备

  1. 适配手机扬声器特性:手机扬声器的功率和音质相对有限,因此声音设计要充分考虑这一特性。在音频编码方面,选择适合手机播放的格式,如 MP3,以保证在不同手机型号上都能流畅播放。同时,避免使用过于复杂的音频混音效果,以免在手机上播放时出现失真或卡顿。在代码中设置音频格式和编码参数:

​MediaRecorder mediaRecorder = new MediaRecorder();​

​mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);​

​mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);​

​mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);​

​mediaRecorder.setAudioEncodingBitRate(128000);​

​mediaRecorder.setAudioSamplingRate(44100);​

  1. 操作反馈声音优化:由于手机使用场景多样,可能处于嘈杂环境,操作反馈声音要足够清晰可辨。在设计音效时,提高声音的高频部分,增强声音的穿透力。例如,将按钮点击音效的高频部分提升 10%,使声音在嘈杂环境中也能突出。在音频编辑软件中调整音效的频率参数,然后在应用中加载优化后的音效文件。

(二)平板设备

  1. 利用平板音响优势:平板通常配备了相对较好的音响系统,具有更宽的音频频率响应范围和更高的音量上限。在设计声音时,可以充分利用这一优势,提供更丰富、饱满的音频体验。例如,在视频播放应用中,支持更高质量的音频解码,如杜比全景声(Dolby Atmos),为用户带来沉浸式的音频享受。在代码中启用平板设备的高级音频功能:

​AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);​

​if (audioManager.isAudioDeviceAvailable(AudioManager.AUDIO_DEVICE_OUT_USB_HEADSET) && audioManager.isOffloadSupported(AudioManager.AUDIO_CONTENT_TYPE_MUSIC, AudioManager.AUDIO_DEVICE_OUT_USB_HEADSET)) {​

​// 启用高级音频解码功能​

​audioManager.setOffloadEnabled(AudioManager.AUDIO_CONTENT_TYPE_MUSIC, AudioManager.AUDIO_DEVICE_OUT_USB_HEADSET, true);​

​}​

  1. 分屏操作声音设计:平板支持分屏操作,在声音设计上要考虑不同应用在分屏状态下的声音交互。例如,当用户在分屏模式下同时运行视频播放应用和聊天应用时,视频播放声音和聊天消息提示音要能够清晰区分,且互不干扰。通过设置不同应用声音的优先级和音量平衡来实现:

​@Entry​

​@Component​

​struct SplitScreenSoundManager {​

​@State videoVolume: number = 0.5;​

​@State chatVolume: number = 0.3;​

​build() {​

​Column() {​

​Slider({ value: this.videoVolume, min: 0, max: 1 })​

​.onChange((newValue) => {​

​this.videoVolume = newValue;​

​// 设置视频应用音量的逻辑​

​})​

​Text('视频音量调节')​

​Slider({ value: this.chatVolume, min: 0, max: 1 })​

​.onChange((newValue) => {​

​this.chatVolume = newValue;​

​// 设置聊天应用音量的逻辑​

​})​

​Text('聊天音量调节')​

​}​

​}​

​}​

(三)智慧屏设备

  1. 远距离操作声音反馈:智慧屏通常在客厅等较大空间使用,用户与设备之间有一定距离。因此,操作反馈声音要足够响亮且清晰。在设计声音时,增加声音的响度和回音效果,模拟真实空间中的声音传播。例如,将按钮点击音效的响度提高 20%,并添加 0.5 秒的回音效果,使声音在远距离也能被用户清晰听到。在音频编辑软件中处理音效文件,然后在智慧屏应用中加载该文件。
  2. 适配家庭环境音效:智慧屏主要用于家庭娱乐,声音设计要营造出适合家庭环境的氛围。比如,在影视应用中,根据不同的影片类型,调整音频的混响效果。对于动作片,增加较强的混响,营造出宏大的场景感;对于文艺片,采用较柔和的混响,突出情感氛围。在代码中根据影片类型设置音频混响参数:

​MediaPlayer mediaPlayer = MediaPlayer.create(this, movieAudioUri);​

​AudioEffect audioEffect = new AudioEffect(AudioEffect.Type.REVERB, mediaPlayer.getAudioSessionId());​

​if (movieType == MOVIE_TYPE_ACTION) {​

​audioEffect.setParameter(AudioEffect.Key.REVERB_DAMPING, 0.3f);​

​audioEffect.setParameter(AudioEffect.Key.REVERB_LEVEL, 0.8f);​

​} else if (movieType == MOVIE_TYPE_DRAMA) {​

​audioEffect.setParameter(AudioEffect.Key.REVERB_DAMPING, 0.6f);​

​audioEffect.setParameter(AudioEffect.Key.REVERB_LEVEL, 0.5f);​

​}​

​audioEffect.setEnabled(true);​

​mediaPlayer.start();​

HarmonyOS Design 的声音设计通过对音量、音色、节奏与时长等属性的精心雕琢,并结合不同设备的特点进行差异化设计,能够为用户带来丰富、优质且适配不同场景的声音体验,进一步提升 HarmonyOS 应用的整体品质。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报


回复
    相关推荐