Swift - 检查 url 资产是不是有声音

Posted

技术标签:

【中文标题】Swift - 检查 url 资产是不是有声音【英文标题】:Swift -check if url asset has soundSwift - 检查 url 资产是否有声音 【发布时间】:2020-11-07 23:50:20 【问题描述】:

我的屏幕裂了,我的手机没有声音功能。我用相机录制了一段视频。当我从didFinishPickingMediaWithInfo 选择视频网址时,我试图检查视频是否有声音,但player.currentItem?.asset.tracks 说视频确实有声音(设备和录制的视频肯定没有声音)。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 

   // ...
   guard let url = info[UIImagePickerController.InfoKey.mediaURL] as? URL else  return 

   // ...
   let asset = AVURLAsset(url: url)
   let playerItem = AVPlayerItem(asset: asset)
   let player = AVPlayer(playerItem: playerItem)

   if let tracks = player.currentItem?.asset.tracks 
                
       switch tracks.count 
       case 0:
           print("tracks -0: audio only")
                    
       case 1:
           print("tracks -1: video only ")

       case 2:
           print("tracks -2: audio and video") // this prints when the video does have sound (recorded before the screen cracked)
                    
       default:
           print("tracks -default: audio and video") // *** this always prints when the video doesn't have sound (recorded after the screen cracked) ***       
          
   

【问题讨论】:

【参考方案1】:

这是这样做的方法:

let asset = AVURLAsset(url: url)
// if using a mixComposition it's: let asset = mixComposition (an AVMutableComposition itself is an asset)

let audioTrack = asset.tracks(withMediaType: .audio)
if audioTrack.isEmpty 

    print("this video has no sound")

 else 

    print("this video has sound")

【讨论】:

您是在检测来自其他地方的曲目还是您提供的曲目?例如,我的设备坏了,我可以录制视频但没有声音。我要做的是提供一个无声的音轨来代替。当我保存时,我将 noSound 属性设置为 true。稍后,当从我的应用程序中的其他地方读取保存的内容时,我只会查找该属性以检查声音。当然,这是在我自己的应用程序中保存/读取的上下文中。如果不从我的应用程序开始保存,就无法从我的应用程序的其他任何地方提取记录。这对你有帮助吗? 试试这个静音音轨bigsoundbank.com/detail-0917-one-minute-of-silence.html 我刚刚对您的问题添加了评论。这就是你要找的***.com/a/52280271/4833705。检查噪音水平是否低于-80dB,如果是,则将其视为静音。 你也可以查看这个WWDC视频developer.apple.com/videos/play/wwdc2015/508 给我一些,我来帮你。我不是音频专家,但我会尝试通过代码形式为您提供正确的答案。

以上是关于Swift - 检查 url 资产是不是有声音的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中检查 URL 的有效性?

AVAudioPlayer 不播放音频文件 - swift

检查字符串名称是不是与 images.xcassets 中的资产匹配

如何检查 Phonon 声音是不是已经在播放?

检查 Windows 上的任何设备是不是正在播放声音 python

如何检查图像资产是不是存在,然后将其用作圆形头像或在圆形头像中写下姓名的第一个字母