특정 주파수의 소리를 출력


25

이것은 다소 간단한 도전이지만 실제로 비슷한 질문을 찾을 수 없습니다. 문제는 STDIN 또는 이와 동등한 기능을 사용하여 주파수를 취한 다음 해당 주파수와 일치하는 톤을 Hz 단위로 5 초 동안 출력하는 것입니다. 예를 들어

Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)

규칙

  • STDIN 또는 해당 언어와 동등한 언어로 입력해야합니다.
  • 답은 완전한 프로그램이어야합니다
  • 내장 사용 가능
  • 주파수는 50 ~ 5000Hz입니다.
  • 출력은 5 초 동안 재생되어야합니다
  • 출력은 사인파 형태이어야합니다.

테스트 사례

입력: 440

산출:

입력: 200

산출:

입력: 4000

산출:


  • 이것은 가장 짧은 해결책으로 언어를 찾는 것이 아닙니다 (빈 프로그램이 트릭을 수행하는 곳이 있습니다)-이것은 모든 언어 에서 가장 짧은 해결책을 찾는 것 입니다. 따라서 답변이 수락 된 것으로 표시되지 않습니다.

  • 일반적인 규칙과 달리이 과제보다 새로운 언어라도 언어 (또는 언어 버전)를 자유롭게 사용하십시오. 이 과제에 0 바이트 답변을 제출하기 위해 특별히 작성된 언어는 공정한 게임이지만 특별히 흥미롭지는 않습니다.

    제출물을 테스트하려면 통역사가 있어야합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다.

    또한 언어 프로그래밍 언어에 대한 일반적인 기준 을 완전히 채워야 합니다 .


목록

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


기능이 허용됩니까?
스파게티

@quartata 전체 프로그램이어야합니다.
Chris Loonam

2
많은 사람들이 beep()함수를 사용하고 있음을 알았습니다 . 그것이 사인파임을 보장합니까?
geokavel

2
Windows의 System.Console.Beep것은 내 (현대, Windows 10) 컴퓨터의 사인파이므로 중요하다고 생각합니다. PPCG의 솔루션은 일반적으로 이식성이 필요하지 않습니다.
Lynn

오디오 파일을 인쇄하는 것이 "톤을 출력하는"유효한 방법입니까?
Ilmari Karonen

답변:


13

Q 기본, 18 바이트 (실격)

@pabouk 언급처럼 그것이 재생하므로,이, PC 스피커를 사용하여 사각 파를 문제처럼되지 사인파 묻습니다. (이 답변은이 답변이 게시 된 문제에 추가 되었으므로 투표를했습니다.) 어쨌든 여기에 남겨 두겠습니다.


INPUT F
SOUND F,91

입력 된 주파수에서 91 틱 (5 초) 동안 사운드재생합니다 .


이 프로그램은 마지막 요구 사항을 만족하지 않습니다. "출력은 사인파 형태 여야합니다." SOUND커맨드는 구형파를 생성하는 타이머 칩 (8224)에 의해 구동 된대로 설계된 PC 스피커를 사용한다. --- 현대 PC에서는 8254가 없어도 SOUND명령을 올바르게 에뮬레이션 하여 구형파를 생성해야합니다.
pabouk

3
이 요구 사항은 답변을 게시 한 후에 추가되었습니다. : / 메모를 추가하겠습니다. 그러나이 답변이 맨 위에 투표 된 경우이 답변을 삭제하는 것이 이상합니다.
Lynn

12

Python2, 40 바이트

from winsound import*
Beep(input(),5000)

Windows에서만 작동합니다.


1
시겠습니까 5e3일?
Lynn

3
@ Mauris 아니요, 이미 시도했지만 정수 만 원합니다.
orlp

10

수학, 42 바이트

내장 기능을 사용할 수 있다면 ...

Input[]
EmitSound@Play[Sin[2t%Pi],{t,0,5}]

전체 프로그램에 대한 요구 사항 덕분에 최근에 발견 한 골프 팁 을 사용하여 %(최종 평가 결과) 2 바이트를 절약 할 수있는 것은 이번이 처음이었습니다 .

Mathematica에는 내장 Sound피치가 내장되어 있으며 피치와 지속 시간을 인수로 사용하지만 불행히도 피치는 음표로 제공되어야합니다. 자신 만의 음파를 지정 Play하는 것이 주파수를 다루는 유일한 방법 인 것 같습니다.


7

C #, 80 바이트

class P{static void Main(string[]a){System.Console.Beep(int.Parse(a[0]),5000);}}

BeepJava로 대체 할 수있는 대안이 무엇인지 알고 있습니까?
Kritixi Lithos

7

MATLAB, 36 바이트

sound(sin(pi*input('')*(0:8^-4:10)))

2 바이트를 절약 해 준 flawr 에게 감사 합니다.


2
2^-12대신을 사용하여 하나의 문자를 저장할 수 있습니다 1/4096.
flawr

어리석은 나도 8^-4더 짧아!
flawr


4

FakeASM , 12 바이트

RDA
BEEP 5e3

Windows 참조 구현 (다운로드) 과 함께 작동합니다 . Beep현대 플랫폼에서는 사인파 인 Windows 기능을 호출 합니다.


STDIN은 어디에 있습니까?
cat

1
RDASTDIN에서 숫자를 읽고 register에 넣습니다 A.
Lynn

나는 사양을 읽고 그것을 알아 차 렸지만 내 의견을 삭제하는 것을 잊었습니다. 그래도 감사합니다
고양이

4

배쉬 + X11, 27 20 바이트

xset b 9 $1 5;echo 

여기에는 인쇄 할 수없는 것이 포함되어 있으므로 16 진 덤프가 있습니다.

0000000: 7873 6574 2062 2039 2024 3120 353b 6563  xset b 9 $1 5;ec
0000010: 686f 2007                                ho .

이것은 주파수를 명령 행 인수로 취하고 9 % 볼륨으로 볼륨을 지정합니다 (볼륨이 지정되지 않았기 때문에).

(참고 : 컴퓨터의 일부 문제로 인해 테스트 할 수 없지만 99 % 작동한다고 확신합니다.)


거기에 \ x07이 있습니까?
TheDoctor

아니요, xset은 모든 경고음을냅니다.
스파게티

@TheDoctor 아, 무슨 말인지 알겠다 ... 실제 소음을 내기 위해서는 \ x07이 필요하다. 고정.
스파게티

echo <BEL>여기서 <BEL>실제 문자, 6 바이트를 저장합니다.
Dennis

@ 데니스 도우. 감사!
스파게티

4

자바 스크립트, 114 바이트

p=prompt();c=new AudioContext;with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}

다소 최첨단 브라우저가 필요합니다. 프롬프트에 빈도를 입력하십시오. JSFiddle


prompt()에서 오디오 타이머가 시작된 후에 호출 되기 때문에 5 초 동안 재생되지 않습니다 new AudioContext(). 나는 이것을 얻을 수있는 가장 짧은 길이가 115 바이트라고 생각합니다 c=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}.
user81655

감사합니다. 'with'를 사용한다는 아이디어에 감사드립니다.
Nickson

<script>태그가 전체 프로그램을 고려하기 위해 JavaScript에 필요한 것으로 보지 못했습니다 . 나는 당신이 114에 좋다고 생각합니다. 또한 p과제를 제거하고 설정 frequency.value=prompt()
만하면

@ Mwr247 불행히도, user81655가 지적했듯이 AudioContext가 생성 될 때 오디오 중지 시점을 결정하는 타이머. 그 전에 프롬프트가 나타나야합니다. 그렇지 않으면 입력이 느리면 오디오가 짧아 지거나 전혀 오디오가 출력되지 않을 수 있습니다.
Nickson

p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)이 3 바이트 저장
패트릭 로버츠

4

배쉬 + 리눅스 유틸리티, 95

bc -l<<<"obase=16;for(;t<5;t+=1/8000){a=s($1*t*6.3);scale=0;a*30/1+99;scale=9}"|xxd -p -r|aplay

이것은 진정한 사인파입니다. 경고음이 없습니다. 명령 행을 통해 입력 된 입력 주파수 :

./hz.sh 440

3

처리 148 114 106 바이트

import processing.sound.*;
Engine.start().sinePlay(int(loadStrings("s")[0]),1,0,0,0);delay(5000);exit();

어떤 이유로 처리하려면 import 문과 줄 바꾸기를 모두 사용해야하며, 그렇지 않으면 라이브러리를 인식하지 못합니다.

나는 여전히 처리에 인수를 전달하는 방법을 알지 못했지만 가능하다는 것을 알고 있으므로이 코드에는 스케치 값에 빈도 값이있는 "s"라는 파일이 있어야합니다. 인수를 전달하는 방법을 알 수 있다면 파일로드를로 대체 할 수 args[0]있습니다.


3

VB.net, 90 바이트 , 74 바이트

Module m
Sub Main(a() as String)
Console.Beep(a(0),5000)
End Sub
End Module

Sehnsucht에게 감사합니다

Module m
Sub Main()
Console.Beep(My.Application.CommandLineArgs.First,5000)
End Sub
End Module

이것은 내 첫 번째 게시물이므로 잘못된 일이 있으면 알려주십시오.


1
그 대신 주요 인수 명령 행 인수 점점 감소 될 수 Main(a()As StringBeep(a(0),5000)에 따라 바이트 (74) 전체를 환원 바이트 계수기
Sehnsucht

2

터보 / 볼랜드 / Free / GNU 파스칼, 95 바이트

Turbo / Borland 파스칼을 실행하려는 최신 컴퓨터 (200MHz 이상의 속도)의 지연 기능 문제로 인해 패치 된 CRT 라이브러리가 있어도 5 초 동안 기다리지 않을 수 있습니다

Program a;Uses crt;Var i,k:Integer;BEGIN Val(ParamStr(1),i,k);Sound(i);Delay(5000);NoSound;END.

문자열에서 정수로의 변환은 FreePascal에서 더 짧게 (77 바이트) 수행 될 수 있으며 최신 파생 StrToInt함수 는 다음 기능 을 갖습니다 .

Program a;Uses crt;BEGIN Sound(StrToInt(ParamStr(1)));Delay(5000);NoSound;END.

1
내가 아는 한, 파스칼 프로그램은 Program a;부분이 없어도 모든 컴파일러에서 잘 작동 하므로 생략하면 10 바이트를 이길 수 있습니다.
vsz

@vsz FPC는 괜찮을 수도 있습니다 (따라서 두 번째 스 니펫에서 제거 할 수 있습니다). 필요한 것을 기억하는 한 TP5.5와 같은 고대의 것들을 여전히 확인해야합니다.
SztupY

요구 사항은 그래서 긴 건너 뛰고 "입력은 STDIN을 통해에주의해야한다"라고 ParamStr()바로 Read()그와 같은 요구 : pastebin.com/1Tw2d0D6
manatwork

2

펄, 27 바이트

기본적으로 모듈을 허용하는 경우 Perl 버전의 Python 응답 (Windows에서만 작동)도 있습니다.

use Audio::Beep;beep<>,5000

2

Vitsy + X11, 20 바이트

"5 "WX" 9 b tesx",7O

내 bash 답변의 번역. 온라인 통역사에서 작동하지 않습니다 (분명히).

숫자가 아닌 문자 다음에 주파수를 입력합니다 (440Hz 입력의 경우 "a440"을 수행 할 수 있음).

설명

"5 "WX" 9 b tesx",7O
"5 "                   Push " 5"
    WX                 Reads input and removes the first character (which is used to force string context)
      " 9 b tesx"      Push "xset b 9 "
                 ,     Pop everything and execute as a shell command.
                  7O   Output bell char.

멋진 답변입니다. 잘 하셨어요.
Rɪᴋᴇʀ

Vitsy를 사용했습니다. <3 내 아이가 구속되었습니다.
애디슨 크럼

1

WinAPI가있는 C, 82 바이트

#include<windows.h>
#include<stdio.h>
main(){int x;scanf("%i",&x);Beep(x,5000);}

WinAPI Beep () 함수를 사용합니다.


당신은 통과 할 필요가 없습니다 &xscanf? 또한 xmain에 매개 변수로 선언 하고 컴파일러에서 기본 유형을 지정할 수 있습니다 .

@Neil, 나는 통과하지 않고 그것을 잘못 입력 방법을 모르는 &xscanf(). 지금 수정되었습니다. 감사.
user2064000


0

셰이더 토이 GLSL 사운드 셰이더, 86

#define F 440.0
vec2 mainSound(float t){return vec2(sin(6.3*F*t)*(t<5.0?1.0:0.0));}

"입력"은을 통해 제공됩니다 #define. 대략적인 주파수가 FHz 인 사인파를 출력합니다 . "default"6.2831 대신 2 * Pi를 6.3으로 반올림했지만 거의 동일하게 들립니다.

슬프게도 여기 골프는별로 없습니다.


입력은 하드 코딩되지 않은 STDIN을 통해 가져와야합니다.
flawr

@flawr 나는 Shadertoy에 대한 정확한 입력 방법을 모른다. 제발 깨달아 줘
Kroltan

이것은 내 것이 아니라 당신의 임무입니다. 그러나 나는 어쨌든 Shadertoy를 모른다 그래서 나는 당신을 도울 수 없습니다.
flawr

@flawr 합리적인 정밀도의 유일한 방법은 커서 위치 뿐이지 만 사운드 셰이더가 아닌 이미지 셰이더에만 사용할 수 있습니다. 그래서 나는 정의에 거의 붙어 있습니다.
Kroltan

파일을로드 할 수 있습니까? 그게 내가 한 일입니다.
geokavel

0

Jolf, 4 바이트, 비경쟁

이 언어 추가는 도전 후에 왔습니다.

Αc5j
Αc     create a beep
  5     five seconds long
   j    with the input as a frequency

기본 웨이브는 사인파입니다.


0

SmileBASIC, 84 바이트

INPUT F
N=LOG(F/440,POW(2,1/12))+57BGMPLAY FORMAT$("@D%D@255T12N%D",(N-(N<<0))*63,N)

Hz에서 반 단계로 변환하고 주파수를 생성하기 위해 디튠 값으로 특정 음을 연주합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.