我想在我的Mac OS X中播放蜂鳴聲並指定持續時間和頻率。在Windows上,可以使用Beep function(.Net中的Console.Beep)完成。 Mac上有什麼等價物嗎?我知道NSBeep,但它不需要任何參數。用自定義頻率和持續時間鳴響
回答
在Mac上,系統警報聲音是用戶選擇的採樣(預先錄製)的聲音。它通常聽起來不像一聲嘟嘟聲 - 它可能是一種不能作爲固定形狀,頻率和振幅的簡單恆定波形的鳴笛,聲響,喧譁或其他聲音。它甚至可以記錄用戶的聲音,或來自電視節目或電影或遊戲或歌曲的剪輯。
它也不需要只是一個聲音。其中一種輔助功能選項是當警報聲播放時閃爍屏幕;當您播放警報聲音(或自定義警報聲音)時會自動發生,但在通過常規聲音播放API(如NSSound)播放聲音時不會發生。
因此,沒有簡單的方法來播放指定和恆定的形狀,頻率和幅度的自定義嘟嘟聲。任何這樣的嘟嘟聲都會與用戶選擇的警告聲音不同,並且可能根本無法讓用戶感覺到。
要在Mac上播放警報聲,請使用NSBeep
或稍微複雜一點的AudioServicesPlayAlertSound
。後者允許您使用自定義聲音,但即使這些聲音也必須預先錄製,或者至少使用更多的Core Audio代碼來預先生成,而不是值得編寫。
我推薦使用NSBeep
。這是尊重用戶選擇的一行代碼。
謝謝,我最終做了什麼。 – Giorgi
PortAudio有在這裏做這個跨平臺的C代碼:https://subversion.assembla.com/svn/portaudio/portaudio/trunk/examples/paex_sine.c
特定的採樣生成在左,右揚聲器鈴聲,但不顯示的頻率是如何計算的。爲此,您可以使用此代碼中的公式:Is there an library in Java for emitting a certain frequency constantly?
我需要類似的應用程序功能。我最終寫了一個小的可重用類來爲我處理這個問題。
,用於產生具有指定頻率和幅度簡單的正弦波形的音頻音調可重複使用的類。可以連續播放或在指定的時間內播放。
的接口是相當簡單的,如下所示:
@interface TGSineWaveToneGenerator : NSObject
{
AudioComponentInstance toneUnit;
@public
double frequency;
double amplitude;
double sampleRate;
double theta;
}
- (id)initWithFrequency:(double)hertz amplitude:(double)volume;
- (void)playForDuration:(float)time;
- (void)play;
- (void)stop;
@end
下面是與新的AVAudioEngine/AVAudioNode的API這樣做的一種方式,而斯威夫特:
import AVFoundation
import Accelerate
// Specify the audio format we're going to use
let sampleRateHz = 44100
let numChannels = 1
let pcmFormat = AVAudioFormat(standardFormatWithSampleRate: Double(sampleRateHz), channels: UInt32(numChannels))
let noteFrequencyHz = 440
let noteDuration: NSTimeInterval = 1
// Create a buffer for the audio data
let numSamples = UInt32(noteDuration * Double(sampleRateHz))
let buffer = AVAudioPCMBuffer(PCMFormat: pcmFormat, frameCapacity: numSamples)
buffer.frameLength = numSamples // the buffer will be completely full
// The "standard format" is deinterleaved float, so we can assume the stride is 1.
assert(buffer.stride == 1)
for channelBuffer in UnsafeBufferPointer(start: buffer.floatChannelData, count: numChannels) {
// Generate a sine wave with the specified frequency and duration
var length = Int32(numSamples)
var dc: Float = 0
var multiplier: Float = 2*Float(M_PI)*Float(noteFrequencyHz)/Float(sampleRateHz)
vDSP_vramp(&dc, &multiplier, channelBuffer, buffer.stride, UInt(numSamples))
vvsinf(channelBuffer, channelBuffer, &length)
}
// Hook up a player and play the buffer, then exit
let engine = AVAudioEngine()
let player = AVAudioPlayerNode()
engine.attachNode(player)
engine.connect(player, to: engine.mainMixerNode, format: pcmFormat)
try! engine.start()
player.scheduleBuffer(buffer, completionHandler: { exit(1) })
player.play()
NSRunLoop.mainRunLoop().run() // Keep running in a playground
- 1. 檢測特定頻率和持續時間的嘟嘟聲
- 2. 確定一個頻率和幅度的持續時間
- 3. SVDProgressHUD中的自定義持續時間
- 4. Mediaelement.js需要自定義刪除音頻的持續時間
- 5. ListView自定義適配器 - 添加視頻持續時間
- 6. libavcodec的視頻獲得持續時間和幀率
- 7. HTML5視頻持續時間
- 8. 生成特定持續時間內頻率的斜坡音頻信號
- 9. Retrieveing視頻/音頻持續時間使用WindowsAPICodecPack和殼牌
- 10. 自定義某些時刻人性化的持續時間值
- 11. 源視頻和低頻音頻的持續時間不同
- 12. 確定音頻文件的持續時間和格式
- 13. 爲什麼視頻currentTime和持續時間未定義從JQuery訪問?
- 14. 如何顯示視頻的總時間和持續時間
- 15. Python中動畫GIF的自定義幀持續時間ImageIO
- 16. 具有自定義持續時間的ActivityOptionsCompat.makeSceneTransitionAnimation
- 17. 獲取自定義類中的動畫持續時間
- 18. 如何自定義持續時間字段的格式?
- 19. Android自定義攝像機最小持續時間
- 20. 熊貓Dataframe VWAP自定義持續時間計算
- 21. 檢索上傳前的視頻文件的分辨率和持續時間
- 22. 將MIDI或WAV文件轉換爲頻率和持續時間數組
- 23. 如何輕鬆閱讀Java中的視頻持續時間和比特率?
- 24. IAP自動續期的持續時間
- 25. 獲取AVFoundation視頻的持續時間
- 26. 視頻/電影持續時間
- 27. HTML5視頻持續時間問題
- 28. 最長持續時間HTML5視頻
- 29. AVAsset視頻調整持續時間
- 30. 獲取視頻的持續時間
你就不能創建使用CoreAudio的波形和播放? – 2012-09-22 20:38:52
這可能有所幫助: http://stackoverflow.com/questions/347250/tone-generation-in-cocoa-touch –