"For God’s sake how much more carnage are we willing to accept?" he tweeted.
His comments come a day after a mass shooting in Oklahoma, where four people were killed and nine days after a school shooting in Texas, where 19 primary age pupils and two teachers were gunned down. Ten days earlier, 10 black people were gunned down in a grocery store in Buffalo.
In an unusual address to the nation late on Thursday evening, he said that if a ban was not possible, the age to buy assault weapons should be raised from 18 to 21.
He said: “After Columbine, after Sandy Hook, after Charleston, after Orlando, after Las Vegas, after Parkland — nothing has been done.
“Enough, enough. It’s time for each of us to do our part,” he told Americans. “For the children we’ve lost. For the children we can save. For the nation we love.”
He added: “The fact that the majority of the Senate Republicans don’t want any of these proposals, even to be debated or come up for a vote, I find unconscionable. We can’t fail the American people again.”
He was speaking from the Cross Hall, part of his White House residence, which was decorated with candles in memory of victims of gun violence.