小编Dan*_*day的帖子

HTML5音频对象无法在iPad上播放(从setTimeout调用时)

我有一个隐藏<audio>对象的页面,通过javascript使用自定义按钮启动和停止.(原因是我想自定义按钮,而绘制音频播放器似乎会破坏iPad上的渲染性能).一个简化的例子(在coffeescript中):

// Works fine on all browsers

constructor: (@_button, @_audio) ->
  @_button.on 'click', @_play          // Bind button's click event with jQuery

_play: (e) =>
  @_audio[0].play()                    // Call play() on audio element
Run Code Online (Sandbox Code Playgroud)

从绑定到click事件的函数触发时,音频播放效果很好,但实际上我希望在播放文件之前完成动画,所以我放入.play()了一个setTimeout.但是,我无法让这个工作:

// Will not play on iPad

constructor: (@_button, @_audio) ->
  @_button.on 'click', @_play          // Bind button's click event with jQuery

_play: (e) =>
  setTimeout (=>                       // Declare a 300ms timeout
    @_audio[0].play()                  // Call play() on audio element
  ), 300
Run Code Online (Sandbox Code Playgroud)

我已经检查过 …

javascript audio html5 settimeout ipad

5
推荐指数
1
解决办法
4342
查看次数

如何在 OpenGL 中使两个平滑形状相交?

我已经使用生成三角形带的例程在 OpenGL 中成功绘制了两个平滑形状,该三角形带的最外层边缘线的所有顶点都位于alpha 0。现在我想将它们相交,但我似乎总是失去一个形状的平滑边缘。这是我正在使用的代码:

\n
// Draw: smooth black shape as normal\n\nglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);\n// Draw: smooth black shape into alpha channel\n\nglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\nglBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA);\n// Draw: Yellow overlay shape with black shape\'s alpha\n\n// Reset blending modes for rest of program\n
Run Code Online (Sandbox Code Playgroud)\n

组合形状

\n\n

这是结果(底部)\xe2\x80\x94 黄色形状失去了平滑的右侧边缘,因为这些像素中的 alpha 现在为 1。如何获得平滑的相交形状?

\n

alpha blending opengl-es masking opengl-es-2.0

5
推荐指数
1
解决办法
668
查看次数

如何使 UIViewRepresentable @ViewBuilder 处理动态内容?

是否可以使UIViewRepresentable带有ViewBuilder参数的视图与循环等动态内容一起工作ForEach

\n\n

我有以下UIViewRepresentable视图,我\xe2\x80\x99m 使用它下拉UIKit并获取一些自定义UIScrollView行为:

\n\n
struct CustomScrollView<Content:View>: UIViewRepresentable {\n\n    private let content: UIView\n    private let scrollView = CustomUIScrollView()\n\n    init(@ViewBuilder content: () -> Content) {\n        self.content = UIHostingController(rootView: content()).view\n        self.content.backgroundColor = .clear\n    }\n\n    func makeUIView(context: Context) -> UIView {\n        scrollView.addSubview(content)\n        // ...\n        return scrollView\n    }\n\n    func updateUIView(_ uiView: UIView, context: Context) {}\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这适用于静态内容,如下所示:

\n\n
var body: some View {\n    CustomScrollView {\n        VStack {\n            ForEach(1..<50) { number in\n                Text(String(number))\n …
Run Code Online (Sandbox Code Playgroud)

uikit ios swift swiftui

5
推荐指数
1
解决办法
2619
查看次数

从核心音频获取内置输出

是否可以可靠地获取AudioDeviceIDMac的内置输出?我尝试使用kAudioHardwarePropertyDefaultOutputDevice来获取当前选择的输出设备,但这可以是任何旧设备,具体取决于用户在系统偏好设置中选择的内容-我只需要内置扬声器的ID。

AudioObjectPropertyAddress theAddress = { kAudioHardwarePropertyDefaultInputDevice,
                                          kAudioObjectPropertyScopeGlobal,
                                          kAudioObjectPropertyElementMaster };

verify_noerr (AudioObjectGetPropertyData(kAudioObjectSystemObject,
                                         &theAddress,
                                         0,
                                         NULL,
                                         &propsize,
                                         &inputDevice));
Run Code Online (Sandbox Code Playgroud)

目前,我正在获取所有设备的列表,并通过执行操作来检查设备的名称字符串name == "Built-in Output"。这可以在我的机器上运行,但似乎不是一个非常可靠的解决方案!有没有类似的东西kAudioHardwarePropertyBuiltInOutputDevice

macos objective-c core-audio

3
推荐指数
2
解决办法
2058
查看次数

AVPlayer 在 CI 服务器上的单元测试期间无法加载文件

我有一些单元测试会导致AVPlayer加载本地文件。文件很小 (~2KB)m4a该文件是测试包中的这些测试对我来说都是本地工作。

\n\n

当在 Travis 上设置我的项目时,我注意到导致AVPlayer在 Travis 上设置我的项目时,我注意到导致加载文件失败的我尝试了其他几个 CI 服务,也遇到了同样的问题。我增加了测试超时但没有运气。所有其他测试均通过。

\n\n

我加载如下文件(简化):

\n\n
let path = Bundle(for: type(of: self)).path(forResource: "Pop", ofType: "m4a")!\nlet url = URL(fileURLWithPath: url)\n\nself.player.replaceCurrentItem(with: AVPlayerItem(url: url))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的代码观察到AVPlayer.currentItem.status。当在 CI 上运行时,观察者会以状态触发.failed。是player.errornil并且player.currentItem.error是:

\n\n
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x7f86e1cd8070 {Error Domain=NSOSStatusErrorDomain Code=-101 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-101), NSLocalizedDescription=The operation could not be completed}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有趣的是,在另一个测试中,我故意尝试加载损坏的文件(以断言它无法播放并且我的代码返回相关错误),我收到以下错误,这是预期的,并表明存在 \xe2\x80\x99s从文件系统读取没有问题:

\n\n
Error Domain=AVFoundationErrorDomain …
Run Code Online (Sandbox Code Playgroud)

continuous-integration ios avplayer

3
推荐指数
1
解决办法
1623
查看次数