小编Mys*_*ake的帖子

Swift:从url中检索音频文件标记列表?

我只想获得音频文件中的标记列表.我认为这将是一项不太难的简单的共同任务.但是,我几乎找不到任何示例代码或文档,所以我最终得到了这个:

private func getMarkers(_ url: CFURL) -> AudioFileMarkerList {

  var file: AudioFileID?
  var size: UInt32 = 0
  var markers = AudioFileMarkerList()

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)
  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)
  AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, &markers)

  return markers
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,这不起作用:error: memory read failed for 0x0.

我只是想不通问题.我检查了网址和大小(两者都有效),但总是无法检索标记.任何帮助都会很棒!

编辑: 这种工作,但所有的数据是完全错误的,我无法理解单个音频文件如何有多个标记的AudioFileMarkerLists:

private func getMarkers(_ url: CFURL) -> [AudioFileMarkerList] {

  var file: AudioFileID?
  var size: UInt32 = 0

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)
  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)

  let length = NumBytesToNumAudioFileMarkers(Int(size))
  var markers = [AudioFileMarkerList](repeating: AudioFileMarkerList(), …
Run Code Online (Sandbox Code Playgroud)

audiotoolbox ios swift

10
推荐指数
1
解决办法
579
查看次数

Swift:像Agar.io一样光滑的SKCameraNode机芯?

如果之前有人玩过Agar.io,你可能会熟悉相机移动的方式.它会滑向鼠标,具体取决于鼠标距离屏幕中心的距离.我正在尝试使用SKCameraNode和touchesMoved重新创建此运动:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos = touches.first!.location(in: view)
  let center = view!.center
  let xDist = pos.x - center.x
  let yDist = pos.y - center.y
  let distance = sqrt((xDist * xDist) + (yDist * yDist)) * 0.02
  camera?.position.x += xDist * distance * 0.02
  camera?.position.y -= yDist * distance * 0.02
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这看起来并不太糟糕.但是,这有两个问题.

首先,我想为此使用UIPanGestureRecognizer,因为它可以通过多次触摸更好地工作.我无法想象如何做到这一点,因为我无法想到一种方法来使用它来获得从触摸到屏幕中心的距离.

第二个问题是这种运动并不顺利.如果用户停止移动他们的手指一帧,那么由于相机拍摄到绝对停止,因此会有巨大的跳跃.我在数学方面很糟糕,所以我想不出一种方法来实现一个很好的平滑衰减(或攻击).

任何帮助都会很棒!

编辑:我现在这样做:

private var difference = CGVector()

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos …
Run Code Online (Sandbox Code Playgroud)

touchesmoved touchesbegan ios swift skcameranode

9
推荐指数
1
解决办法
451
查看次数

CMake 错误:找不到 SWIG(缺少:SWIG_DIR)

我想在 Node.JS 中测试Pocketsphinx。它说我需要安装 Swig 3.0.7 或更高版本。

我想我正确安装了所有其他依赖项。我现在甚至可以在终端中输入 Swig 命令,但是每次运行时我都会收到此错误npm install pocketsphinx

CMake Error at /usr/local/Cellar/cmake/3.6.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find SWIG (missing: SWIG_DIR) (Required is at least version
  "3.0.7")
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.6.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.6.3/share/cmake/Modules/FindSWIG.cmake:75 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:4 (find_package)
Run Code Online (Sandbox Code Playgroud)

我试过brew install swig, npm install swig, 和npm install -g swig。我尝试转到swig 下载页面并按照安装说明进行操作,但我似乎没有采取任何措施阻止错误发生。顺便说一下,我正在 Macbook 上尝试这个。

我真的不知道我在这里做什么。我只是想测试 Pocketsphinx,现在我已经在 4 个不同的地方安装了 Swig,而 CMake 似乎无法识别其中任何一个。

任何帮助都会很棒!

swig cmake node.js pocketsphinx

7
推荐指数
2
解决办法
1万
查看次数

JavaScript:获取数组中的平均对象?

我试图想办法使这个代码变得简单,使用最少量的循环和变量,但我遇到了麻烦.

我希望根据'value'得到数组'numbers'中的平均对象.我觉得必须有一种数学方法来获得平均值,而不是在另一个循环中找到最接近的平均值.

目前我有这个烂摊子:

var numbers = [
	{ value: 41 },
	{ value: 19 },
	{ value: 51 },
	{ value: 31 },
	{ value: 11 }
];
// Find average:
var sum = 0;
for (var i = 0; i < numbers.length; i++) {
	sum += numbers[i].value;
}
var average = sum / numbers.length;
// Find closest object to average:
var match, difference;
for (var j = 0; j < numbers.length; j++) {
	const diff = Math.abs(average - numbers[j].value); …
Run Code Online (Sandbox Code Playgroud)

javascript arrays average

7
推荐指数
1
解决办法
1014
查看次数

OpenGL ES 2.0:属性与布局?

我在顶点着色器中使用“属性”来定义几个变量,如下所示:

attribute mediump vec4 Position;
attribute lowp vec4 SourceColor;
Run Code Online (Sandbox Code Playgroud)

环顾四周,我发现了一个叫做“布局”的东西,它似乎在做同样的任务。

例如,我认为上述内容可以改写为:

layout(location = 0) in vec4 Position;
layout(location = 1) in vec4 SourceColor;
Run Code Online (Sandbox Code Playgroud)

我以前从未使用过布局,所以我不确定它的工作原理是否相同,但它看起来与我非常相似,而且 wiki 页面并不能特别帮助我区分它们。

有人可以解释一下属性和布局之间的区别吗?

opengl-es glsl vertex-shader

6
推荐指数
1
解决办法
2912
查看次数

Javascript:根据单词改变单词颜色?

我想根据单词是什么来更改句子中单词的背景颜色。

我希望用户能够像在文本区域中输入单词一样,但文本区域不支持单词背景颜色。

目前我只能想到这样的盗版解决方案:

var div = document.getElementById("div");

function highlight() {
  var words = div.textContent.split(" ");
  div.innerHTML = "";
  for (var i = 0; i < words.length; i++) {
    if (words[i] === "good") {
      div.innerHTML += "<span style=\"background-color: green;\">" + words[i] + "</span> ";
    } else if (words[i] === "bad") {
      div.innerHTML += "<span style=\"background-color: red;\">" + words[i] + "</span> ";
    } else {
      div.innerHTML += "<span>" + words[i] + "</span> ";
    }
  }
  var range = document.createRange();
  var sel = …
Run Code Online (Sandbox Code Playgroud)

html javascript css textarea background-color

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

OpenGL:带片段着色器的圆形斜角?

我正在尝试制作一个圆形粒子,看起来它的顶部有光。

这是我试图让它看起来像的:

粒子 1

这是它目前的样子:

在此处输入图片说明

由于我使用的是 GL_POINTS,我得到了 gl_PointCoord 变量,这应该会使事情变得更容易,除非我不知道如何正确使用它,这导致了这个混乱:

varying lowp vec4 DestinationColor;

void main(void) {
  lowp vec2 circCoord = 2.0 * gl_PointCoord - 1.0;
  if (dot(circCoord, circCoord) > 1.0) {
    discard;
  }
  gl_FragColor = mix(DestinationColor, vec4(1, 0.5, 0.2, 1), (1.0-gl_PointCoord.t)*(max(abs(gl_PointCoord.t-0.5),abs(gl_PointCoord.s-0.5)))); // the world's worst slowest math
}
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何帮助,因为我的数学技能很差,所以我被困住了。

opengl-es fragment-shader ios opengl-es-2.0

4
推荐指数
1
解决办法
316
查看次数

Xcode 8 Swift 3 变调声音

所以,我之前在 Apple Developer Forums 上问过这个问题,但从来没有得到正确的答案,所以我想我会在这里问:

我正在尝试制作一个简单的游戏,当您击打某些东西时,该游戏的击打声会具有不同的音高。我认为这很简单,但最终得到了很多东西(其中大部分是我完全从别人那里复制的):

func hitSound(value: Float) {  

    let audioPlayerNode = AVAudioPlayerNode()  

     audioPlayerNode.stop()  
     engine.stop() // This is an AVAudioEngine defined previously  
     engine.reset()  

     engine.attach(audioPlayerNode)  

     let changeAudioUnitTime = AVAudioUnitTimePitch()  
     changeAudioUnitTime.pitch = value  

     engine.attach(changeAudioUnitTime)  
     engine.connect(audioPlayerNode, to: changeAudioUnitTime, format: nil)  
     engine.connect(changeAudioUnitTime, to: engine.outputNode, format: nil)  
     audioPlayerNode.scheduleFile(file, at: nil, completionHandler: nil) // File is an AVAudioFile defined previously  
     try? engine.start()  

     audioPlayerNode.play()  
 }  
Run Code Online (Sandbox Code Playgroud)

由于此代码似乎停止播放当前正在播放的任何声音以播放新声音,有没有办法可以改变这种行为,使其不停止播放任何东西?我尝试删除 engine.stop 和 engine.reset 位,但这只会使应用程序崩溃。此外,这段代码在频繁调用时非常慢。有什么我可以做的来加快速度吗?非常频繁地需要这种击打声。

audio xcode avfoundation pitch swift

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

Swift 3:获取 AVAudioPCMBuffer 的长度作为 TimeInterval?

我试图获取 AVAudioPCMBuffer 的时间长度,但我似乎做不到。我尝试执行以下操作:

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
  let framecount = buffer.frameCapacity
  let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame
  return TimeInterval(bytesperframe * framecount)
}
Run Code Online (Sandbox Code Playgroud)

但这给出了一个巨大的数字,这似乎不是我想要的。

编辑:我将代码更改为:

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
  let framecount = Float64(buffer.frameCapacity)
  let samplerate = buffer.format.streamDescription.pointee.mSampleRate
  return TimeInterval(framecount / samplerate)
}
Run Code Online (Sandbox Code Playgroud)

这似乎可行,但似乎有点复杂。还有别的办法吗?

audio avfoundation swift avaudiopcmbuffer

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

如何在XCode中编写OpenGL ES片段着色器?

我正在尝试将自己的着色器用作SKSphaN的SKShader,但我只是不知道正确的方法.我想要的只是一种用自动完成来编写着色器代码的方法,并且可以看到着色器,而不必等待很长时间来编译它,但它似乎比我想象的更难.

我已经安装了GLFW3以及其他一些奇怪的东西,因为大多数教程都建议使用OpenGL这样的东西,但它似乎更多的是整个OpenGL,而不仅仅是一种特定的着色器.

TL; DR:有没有人知道在SpriteKit中编写着色器以用作SKShaders的快速而简单的方法?

opengl-es fragment-shader sprite-kit skspritenode swift

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

UIBezierPath填充vs CAShapeLayer

我试图绘制一个简单的形状作为游戏界面的一部分,大多数教程使用UIBezierPath来定义CAShapeLayer的路径.但是,我注意到UIBezierPath已经有了一个现有的填充功能.

这可能是一个愚蠢的问题,但使用它和使用单独的CAShapeLayer绘制路径有什么区别?还有哪一个更好?

cashapelayer ios uibezierpath swift

0
推荐指数
1
解决办法
531
查看次数

Swift:大小与界限vs帧

我在Swift做了一个简单的游戏,我试图找到一个很好的方法来获得游戏场景的中心.目前我正在这样做:

CGPoint(x: size.width / 2, y: size.height / 2)
Run Code Online (Sandbox Code Playgroud)

看起来很简单.但是,在检查时,我发现这四件事也作为GameScene类的一部分存在:

self.frame
self.size
self.view.bounds
self.view.frame
Run Code Online (Sandbox Code Playgroud)

我很困惑.我应该使用哪一个?它们对我来说都是一样的.有什么不同?

ios swift

-1
推荐指数
1
解决办法
2691
查看次数